Подключение языковых пакетов

Интерфейсы современных веб-приложений часто требуют поддержки нескольких языков. Компоненты библиотеки Ant Design по умолчанию используют английский язык для текстовых элементов интерфейса: надписей в таблицах, подсказок календаря, текстов кнопок пагинации, сообщений в пустых состояниях и других элементов.

Языковые пакеты позволяют изменить эти встроенные тексты на любой поддерживаемый язык. Это особенно важно для:

  • международных приложений;
  • локализованных корпоративных систем;
  • административных панелей;
  • продуктов, ориентированных на региональные рынки.

В Ant Design механизм локализации построен на использовании специальных объектов локали, которые передаются через компонент ConfigProvider. Этот компонент распространяет настройки локализации на все вложенные компоненты интерфейса.


Архитектура локализации в Ant Design

Механизм локализации состоит из нескольких элементов:

1. Языковые файлы (locale packages) Файлы локализации содержат переводы стандартных текстов компонентов.

2. Компонент ConfigProvider Глобальный контейнер конфигурации, через который передаются настройки локали.

3. Поддержка date-библиотек Компоненты, связанные с датой и временем (DatePicker, Calendar, TimePicker), используют локализацию внешней библиотеки дат.

Общая схема работы:

Языковой пакет → ConfigProvider → Все компоненты Ant Design

Таким образом, достаточно один раз определить локаль на уровне приложения, чтобы все компоненты автоматически использовали нужный язык.


Импорт языкового пакета

Ant Design поставляется с большим набором готовых локалей. Они располагаются в каталоге:

antd/es/locale

Каждый файл соответствует конкретному языку.

Пример подключения русского языка:

import ruRU from 'antd/es/locale/ru_RU';

Другой распространённый способ импорта:

import ruRU from 'antd/lib/locale/ru_RU';

Оба варианта работают, однако использование пути es предпочтительнее в современных сборщиках, так как поддерживает оптимизацию tree-shaking.


Использование ConfigProvider

После импорта языкового пакета необходимо передать его в компонент ConfigProvider.

Пример базовой настройки:

import React from 'react';
import { ConfigProvider, DatePicker } from 'antd';
import ruRU from 'antd/es/locale/ru_RU';

function App() {
  return (
    <ConfigProvider locale={ruRU}>
      <DatePicker />
    </ConfigProvider>
  );
}

export default App;

В этом случае:

  • все компоненты внутри ConfigProvider
  • автоматически используют русский язык.

Изменения затрагивают:

  • текст кнопок;
  • сообщения интерфейса;
  • подсказки календарей;
  • текст пагинации;
  • надписи в таблицах.

Пример влияния локали на компоненты

Рассмотрим компонент Pagination.

Без локализации отображается английский интерфейс:

Items per page
Jump to

После подключения русского пакета:

Элементов на странице
Перейти

Аналогичные изменения происходят в:

  • Table
  • Calendar
  • DatePicker
  • Modal
  • Upload
  • Empty

Каждый компонент содержит собственные текстовые элементы, которые автоматически заменяются переводом из языкового пакета.


Список популярных языковых пакетов

Ant Design поддерживает десятки языков. Наиболее часто используемые локали:

Язык Импорт
Русский ru_RU
Английский en_US
Китайский zh_CN
Испанский es_ES
Французский fr_FR
Немецкий de_DE
Японский ja_JP
Корейский ko_KR
Итальянский it_IT

Пример подключения французского языка:

import frFR from 'antd/es/locale/fr_FR';

Локализация компонентов даты

Компоненты работы с датой используют локаль библиотеки дат. В зависимости от версии Ant Design используется:

  • dayjs (в новых версиях)
  • moment.js (в старых проектах)

Если локализовать только Ant Design, но не библиотеку дат, календарь может отображать месяцы на английском языке.

Пример настройки с dayjs:

import 'dayjs/locale/ru';
import dayjs from 'dayjs';

dayjs.locale('ru');

После этого:

  • названия месяцев;
  • дни недели;
  • формат отображения даты

будут соответствовать выбранной локали.


Полный пример локализации приложения

Пример структуры приложения с локализацией:

import React from 'react';
import ReactDOM from 'react-dom';
import { ConfigProvider, DatePicker, Pagination } from 'antd';
import ruRU from 'antd/es/locale/ru_RU';

import 'dayjs/locale/ru';
import dayjs from 'dayjs';

dayjs.locale('ru');

function App() {
  return (
    <ConfigProvider locale={ruRU}>
      <DatePicker />
      <Pagination total={500} />
    </ConfigProvider>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));

После выполнения этих настроек:

  • интерфейс компонентов Ant Design отображается на русском языке;
  • календарные элементы используют русскую локаль;
  • пагинация и служебные тексты переведены.

Локализация отдельных частей приложения

Иногда требуется использовать разные языки в разных частях интерфейса. Это достигается созданием нескольких ConfigProvider.

Пример:

<ConfigProvider locale={ruRU}>
  <RussianPanel />
</ConfigProvider>

<ConfigProvider locale={enUS}>
  <EnglishPanel />
</ConfigProvider>

Каждый ConfigProvider влияет только на вложенные компоненты.

Это позволяет:

  • создавать мультиязычные интерфейсы;
  • тестировать локализацию;
  • реализовывать разные языковые зоны внутри приложения.

Динамическое переключение языка

Во многих приложениях язык интерфейса выбирается пользователем. В таком случае локаль хранится в состоянии приложения.

Пример:

import React, { useState } from 'react';
import { ConfigProvider, Button } from 'antd';
import ruRU from 'antd/es/locale/ru_RU';
import enUS from 'antd/es/locale/en_US';

function App() {
  const [locale, setLocale] = useState(ruRU);

  return (
    <ConfigProvider locale={locale}>
      <Button onCl ick={() => setLocale(enUS)}>
        Switch language
      </Button>
    </ConfigProvider>
  );
}

При изменении состояния locale все компоненты автоматически перерисовываются с новой локализацией.


Создание собственной локали

Иногда стандартного перевода недостаточно. В таких случаях создаётся собственный объект локализации.

Пример:

const customLocale = {
  ...ruRU,
  Pagination: {
    items_per_page: 'записей'
  }
};

Использование:

<ConfigProvider locale={customLocale}>
  <App />
</ConfigProvider>

Этот подход позволяет:

  • изменять стандартные переводы;
  • адаптировать терминологию;
  • унифицировать текст интерфейса под требования проекта.

Структура языкового пакета

Языковой пакет представляет собой объект с переводами для различных компонентов.

Упрощённая структура:

{
  locale: 'ru',
  Pagination: { ... },
  DatePicker: { ... },
  Table: { ... },
  Modal: { ... },
  Popconfirm: { ... },
  Transfer: { ... },
  Upload: { ... },
  Empty: { ... }
}

Каждый раздел содержит строки, которые используются соответствующим компонентом.

Такое разделение делает систему локализации:

  • модульной;
  • расширяемой;
  • удобной для кастомизации.

Типичные ошибки при подключении локали

1. Локаль подключена, но календарь на английском

Причина — не настроена локализация библиотеки дат.

Решение — подключить locale для dayjs или moment.


2. ConfigProvider расположен слишком глубоко

Если ConfigProvider находится внутри одного компонента, локаль будет применяться только к его потомкам.

Правильное решение — размещать его на верхнем уровне приложения.


3. Неверный путь импорта

Некоторые сборщики требуют импорт именно из antd/es.

Неправильный путь может привести к увеличению размера сборки.


Практическое значение локализации

Подключение языковых пакетов позволяет:

  • адаптировать интерфейс для разных стран;
  • соответствовать требованиям локальных рынков;
  • улучшить пользовательский опыт;
  • унифицировать текст интерфейса.

В крупных приложениях локализация является обязательной частью архитектуры интерфейса и интегрируется вместе с системами перевода, такими как i18n-библиотеки.