useLocale — это хук из библиотеки React
Aria, предназначенный для управления локализацией приложения.
Он предоставляет доступ к информации о текущей локали пользователя, что
особенно важно при работе с форматированием дат, чисел, времени, валют и
других элементов интерфейса, чувствительных к региональным
настройкам.
Для начала необходимо импортировать хук:
import { useLocale } from '@react-aria/i18n';
Простейший пример использования:
function LocaleInfo() {
const { locale, direction } = useLocale();
return (
<div>
<p>Текущая локаль: {locale}</p>
<p>Направление текста: {direction}</p>
</div>
);
}
ru-RU или en-US.ltr
для слева направо, rtl для справа налево), полезно при
построении интерфейсов для арабского или иврита.useLocale работает через контекст
LocaleProvider, который предоставляет данные о
локали всему дереву компонентов:
import { LocaleProvider } from '@react-aria/i18n';
function App() {
return (
<LocaleProvider locale="ru-RU" timeZone="Europe/Moscow">
<LocaleInfo />
</LocaleProvider>
);
}
Параметры LocaleProvider:
Использование LocaleProvider обеспечивает единообразное
поведение всех компонентов, зависящих от локали.
Хук useLocale удобно комбинировать с функциями
Intl.DateTimeFormat и Intl.NumberFormat:
function DateAndNumber() {
const { locale } = useLocale();
const date = new Date();
const formattedDate = new Intl.DateTimeFormat(locale, {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
}).format(date);
const number = 1234567.89;
const formattedNumber = new Intl.NumberFormat(locale).format(number);
return (
<div>
<p>Дата: {formattedDate}</p>
<p>Число: {formattedNumber}</p>
</div>
);
}
ru-RU число будет отображено как
1 234 567,89, а в en-US —
1,234,567.89.понедельник, 16 марта 2026 г. для
ru-RU).direction из useLocale важен при построении
интерфейсов с поддержкой RTL:
function TextBlock() {
const { direction } = useLocale();
return (
<div style={{ direction }}>
<p>Пример текста, автоматически учитывающего направление локали.</p>
</div>
);
}
Браузер корректно отобразит текст в зависимости от направления, обеспечивая правильное выравнивание и поведение элементов интерфейса.
LocaleProvider позволяет передавать объект
messages, который используется компонентами React Aria
для локализованных подсказок, кнопок и меток:
const messages = {
clear: 'Очистить',
close: 'Закрыть',
open: 'Открыть'
};
<LocaleProvider locale="ru-RU" messages={messages}>
<SomeAriaComponent />
</LocaleProvider>
messages.Хук useLocale можно применять и в собственных
компонентах для реализации:
Пример кастомного компонента с поддержкой локали:
function Price({ amount, currency }) {
const { locale } = useLocale();
const formatted = new Intl.NumberFormat(locale, {
style: 'currency',
currency
}).format(amount);
return <span>{formatted}</span>;
}
Вызов <Price amount={1234.56} currency="USD" />
при локали ru-RU выведет 1 234,56 $, а при
en-US — $1,234.56.
useLocale предоставляет locale и
direction.LocaleProvider для корректной работы и
поддержки глобальной локали.Intl для форматирования чисел, дат,
времени и валют.Эффективное использование useLocale делает приложения
React доступными и корректными для международной аудитории, обеспечивая
единообразие локализованных элементов и их правильное отображение.