Любая интерфейсная библиотека предназначена для создания визуальных компонентов пользовательского интерфейса. В большинстве случаев такие библиотеки поставляются с английскими строками интерфейса по умолчанию. Это касается:
В приложениях, ориентированных на русскоязычную аудиторию, использование английских строк ухудшает пользовательский опыт. Для решения этой задачи используется локализация (localization) — механизм перевода интерфейса на нужный язык.
В библиотеке Ant Design локализация реализована централизованно через компонент ConfigProvider, который позволяет:
Ant Design содержит встроенные файлы локалей для большого количества языков. Каждый файл представляет собой объект конфигурации, который включает переводы строк интерфейса для компонентов.
Локализация применяется глобально через компонент ConfigProvider. Этот компонент оборачивает всё приложение и передаёт настройки локали всем компонентам внутри.
Стандартная структура выглядит следующим образом:
import { ConfigProvider } from 'antd'
import ruRU from 'antd/locale/ru_RU'
function App() {
return (
<ConfigProvider locale={ruRU}>
<Application />
</ConfigProvider>
)
}
После применения этой настройки компоненты Ant Design автоматически начинают использовать русские строки интерфейса.
Файл русской локализации поставляется вместе с библиотекой и находится по пути:
antd/locale/ru_RU
Подключение производится через импорт:
import ruRU from 'antd/locale/ru_RU'
Этот объект содержит переводы для следующих компонентов:
После передачи объекта в ConfigProvider перевод применяется автоматически.
Типичная структура приложения с локализацией выглядит следующим образом:
import React from 'react'
import ReactDOM from 'react-dom/client'
import { ConfigProvider } from 'antd'
import ruRU from 'antd/locale/ru_RU'
import App from './App'
const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
<ConfigProvider locale={ruRU}>
<App />
</ConfigProvider>
)
После этого:
Компоненты, связанные с датами, требуют дополнительной настройки. В Ant Design используется библиотека Day.js (начиная с версии Ant Design 5) для работы с датами.
Даже при подключении ru_RU календарь может продолжать
показывать английские названия месяцев. Причина заключается в том, что
библиотека дат должна также быть переключена на русскую локаль.
Для этого необходимо импортировать русскую локаль Day.js.
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
После этого:
Полная конфигурация:
import { ConfigProvider } from 'antd'
import ruRU from 'antd/locale/ru_RU'
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
function App() {
return (
<ConfigProvider locale={ruRU}>
<Application />
</ConfigProvider>
)
}
Компонент выбора даты автоматически использует строки локали Ant Design и форматирование Day.js.
Пример использования:
import { DatePicker } from 'antd'
function Example() {
return <DatePicker />
}
После настройки локализации интерфейс будет выглядеть следующим образом:
Компонент пагинации также содержит текстовые элементы, которые переводятся через локаль.
Пример компонента:
import { Pagination } from 'antd'
function Example() {
return (
<Pagination
total={500}
pageSize={10}
/>
)
}
При активной русской локали появляются следующие тексты:
Эти строки автоматически подставляются из объекта
ru_RU.
Компонент таблицы содержит несколько встроенных текстовых элементов:
Пример таблицы:
import { Table } from 'antd'
const columns = [
{
title: 'Имя',
dataIndex: 'name'
}
]
const data = [
{ key: 1, name: 'Иван' }
]
function Example() {
return <Table columns={columns} dataSource={data} />
}
При использовании ru_RU автоматически переводятся:
Компоненты Modal и Popconfirm имеют системные кнопки:
После подключения русской локали они заменяются на:
Пример модального окна:
import { Modal, Button } from 'antd'
import { useState } from 'react'
function Example() {
const [open, setOpen] = useState(false)
return (
<>
<Button onCl ick={() => setOpen(true)}>Открыть</Button>
<Modal
open={open}
onCan cel={() => setOpen(false)}
onOk={() => setOpen(false)}
>
Содержимое окна
</Modal>
</>
)
}
Тексты кнопок автоматически берутся из локали.
Компонент формы содержит стандартные сообщения валидации:
Эти сообщения также переводятся через локаль.
Пример:
import { Form, Input } from 'antd'
function Example() {
return (
<Form>
<Form.Item
label="Имя"
name="name"
rules={[{ required: true }]}
>
<Input />
</Form.Item>
</Form>
)
}
При пустом поле отображается сообщение:
Пожалуйста, введите имя
Иногда требуется изменить только некоторые строки интерфейса, не меняя всю локаль. Это возможно через модификацию объекта локализации.
Пример изменения текста пустого состояния:
import ruRU from 'antd/locale/ru_RU'
const customLocale = {
...ruRU,
Empty: {
description: 'Нет записей'
}
}
Использование:
<ConfigProvider locale={customLocale}>
<App />
</ConfigProvider>
В некоторых приложениях требуется переключать язык интерфейса во время работы. Для этого локаль хранится в состоянии приложения.
Пример:
import { useState } from 'react'
import { ConfigProvider } from 'antd'
import ruRU from 'antd/locale/ru_RU'
import enUS from 'antd/locale/en_US'
function App() {
const [locale, setLocale] = useState(ruRU)
return (
<ConfigProvider locale={locale}>
<Application changeLocale={setLocale} />
</ConfigProvider>
)
}
Переключение:
setLocale(enUS)
или
setLocale(ruRU)
Все компоненты интерфейса обновят язык автоматически.
Причина — не подключена локаль Day.js.
Решение:
import 'dayjs/locale/ru'
dayjs.locale('ru')
Причина — компонент находится вне ConfigProvider.
Решение — убедиться, что всё приложение обёрнуто в провайдер:
<ConfigProvider locale={ruRU}>
<App />
</ConfigProvider>
Формат дат задаётся отдельно:
<DatePicker format="DD.MM.YYYY" />
При использовании локализации в крупных проектах рекомендуется:
1. Создать отдельный модуль локализации
src/i18n/antdLocale.js
import ruRU from 'antd/locale/ru_RU'
export default ruRU
2. Централизовать настройку Day.js
src/i18n/dayjs.js
import dayjs from 'dayjs'
import 'dayjs/locale/ru'
dayjs.locale('ru')
export default dayjs
3. Хранить текущий язык в глобальном состоянии
Это может быть:
Такая архитектура позволяет: