Библиотека MUI (Material-UI) предоставляет мощные
инструменты для локализации компонентов интерфейса, что позволяет
адаптировать текстовые элементы, форматы дат и чисел под нужды различных
языков и регионов. Локализация в MUI достигается через контекст
LocalizationProvider и соответствующие пакеты
локализации.
import { LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
import ruLocale from 'date-fns/locale/ru';
<LocalizationProvider dateAdapter={AdapterDateFns} locale={ruLocale}>
<YourComponent />
</LocalizationProvider>
В этом примере используется адаптер AdapterDateFns с
локалью ruLocale. Это обеспечивает корректное отображение
дат, календарей и форматов времени для русскоязычного интерфейса.
Для большинства компонентов MUI, таких как
Pagination,
TablePagination,
Autocomplete, существует возможность
замены системных текстов через объект
localeText.
Пример локализации компонента Pagination:
import Pagination from '@mui/material/Pagination';
import { ruRU } from '@mui/material/locale';
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({}, ruRU);
<ThemeProvider theme={theme}>
<Pagination count={10} />
</ThemeProvider>
Ключевые моменты:
ruRU,
frFR, deDE и др.).localeText.Пример кастомного localeText для
Autocomplete:
import Autocomplete from '@mui/material/Autocomplete';
import TextField from '@mui/material/TextField';
<Autocomplete
options={options}
renderInput={(params) => <TextField {...params} label="Выберите элемент" />}
noOptionsText="Нет подходящих вариантов"
/>
Компоненты DatePicker, TimePicker, DateTimePicker требуют отдельного подхода, так как они зависят от адаптера даты.
Пример с адаптером AdapterDayjs:
import { LocalizationProvider, DatePicker } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import 'dayjs/locale/ru';
<LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale="ru">
<DatePicker label="Выберите дату" />
</LocalizationProvider>
Особенности:
adapterLocale задаёт язык интерфейса календаря.DD.MM.YYYY для русской локали.format для точной
настройки отображения даты.<DatePicker
label="Дата события"
inputFormat="DD.MM.YYYY"
/>
ThemeProvider и глобальная локализацияДля глобальной локализации часто используется объединение тематизации и локали. Это позволяет не только менять цвета и типографику, но и полностью адаптировать компоненты под конкретный язык.
import { createTheme, ThemeProvider } from '@mui/material/styles';
import { ruRU } from '@mui/material/locale';
const theme = createTheme({
palette: {
primary: { main: '#1976d2' },
},
}, ruRU);
<ThemeProvider theme={theme}>
<App />
</ThemeProvider>
Такой подход автоматически применяет локализованные тексты для всех
компонентов MUI, которые поддерживают localeText.
Для компонентов, где требуется полный контроль над текстами, создаётся кастомный объект локализации:
import { createTheme, ThemeProvider } from '@mui/material/styles';
import Pagination from '@mui/material/Pagination';
const customLocale = {
MuiPagination: {
"aria-label": "Постраничная навигация",
},
MuiTablePagination: {
labelRowsPerPage: "Строк на странице:",
labelDisplayedRows: ({ from, to, count }) => `${from}-${to} из ${count}`,
},
};
const theme = createTheme({}, customLocale);
<ThemeProvider theme={theme}>
<Pagination count={10} />
</ThemeProvider>
Важные моменты:
localeText или кастомные объекты позволяют гибко
подстраивать компоненты под корпоративный стиль.ThemeProvider.Для приложений с поддержкой нескольких языков можно реализовать смену локали на лету:
const [locale, setLocale] = React.useState(ruRU);
<ThemeProvider theme={createTheme({}, locale)}>
<Button onCl ick={() => setLocale(enUS)}>Switch to English</Button>
<Pagination count={10} />
</ThemeProvider>
Особенности реализации:
LocalizationProvider для
корректного отображения дат при смене языка.Для проектов на TypeScript важно корректно типизировать объекты локализации:
import { ComponentsLocaleText } from '@mui/material';
const ruLocaleText: ComponentsLocaleText = {
MuiPagination: {
"aria-label": "Постраничная навигация",
},
MuiTablePagination: {
labelRowsPerPage: "Строк на странице:",
labelDisplayedRows: ({ from, to, count }) => `${from}-${to} из ${count}`,
},
};
Типизация помогает избежать ошибок при добавлении кастомных текстов и обеспечивает автодополнение в IDE.
LocalizationProvider — адаптер даты и
локаль для компонентов Date/Time.ruRU,
enUS) — упрощают локализацию стандартных компонентов.localeText и кастомные объекты —
точная настройка всех текстов интерфейса.ThemeProvider + локаль — глобальная
локализация через тему.Эти инструменты позволяют создать полностью локализованный интерфейс MUI, поддерживающий даты, форматы чисел и текстовые элементы, адаптированные под нужды любого языка и региона.