React Aria предоставляет инструменты для создания доступных компонентов пользовательского интерфейса, включая поддержку локализации и интернационализации. Основная цель — обеспечить корректное отображение текста, чисел, дат и других элементов в зависимости от языка и региональных настроек пользователя.
Locale В React Aria локализация строится вокруг
объекта locale, который определяет язык, регион и настройки
формата данных. Например:
import {useLocale} from '@react-aria/i18n';
function App() {
let {locale} = useLocale();
console.log(locale); // 'en-US' или 'ru-RU'
}
Ключевой момент: locale влияет на
форматирование дат, чисел и валют, а также на
направление текста (ltr или rtl).
Directionality (Направление текста) Некоторые
языки требуют правостороннего направления текста. React Aria учитывает
это через dir:
import {useLocale} from '@react-aria/i18n';
let {direction} = useLocale();
// 'ltr' для английского, 'rtl' для арабского
Компоненты автоматически применяют правильное направление при рендере.
React Aria использует стандарт ECMAScript Internationalization API для корректного отображения чисел в зависимости от локали:
import {useNumberFormatter} from '@react-aria/i18n';
function Price({amount}) {
let formatter = useNumberFormatter({
style: 'currency',
currency: 'USD'
});
return <span>{formatter.format(amount)}</span>;
}
Особенности:
style может быть 'decimal',
'currency' или 'percent'.currency задаёт валюту (например, 'EUR'
или 'RUB').Для работы с датами React Aria предоставляет
useDateFormatter и useTimeFormatter:
import {useDateFormatter} from '@react-aria/i18n';
function EventDate({date}) {
let formatter = useDateFormatter({
year: 'numeric',
month: 'long',
day: 'numeric'
});
return <span>{formatter.format(date)}</span>;
}
Ключевые параметры:
weekday: 'long' | 'short' | 'narrow'month:
'numeric' | '2-digit' | 'long' | 'short' | 'narrow'day: 'numeric' | '2-digit'year: 'numeric' | '2-digit'Использование этих параметров позволяет отображать даты в формате, привычном для конкретного региона.
React Aria поддерживает переводы статических и динамических
текстов через объект messages.
Пример кастомных сообщений:
import {useMessageFormatter} from '@react-aria/i18n';
import intlMessages from './messages.json';
function SearchInput() {
let formatMessage = useMessageFormatter(intlMessages);
return (
<input
aria-label={formatMessage('searchLabel')}
placeholder={formatMessage('searchPlaceholder')}
/>
);
}
messages.json может выглядеть так:
{
"en-US": {
"searchLabel": "Search",
"searchPlaceholder": "Type to search..."
},
"ru-RU": {
"searchLabel": "Поиск",
"searchPlaceholder": "Введите текст для поиска..."
}
}
Принцип: один объект messages содержит
переводы для всех поддерживаемых локалей. React Aria автоматически
выбирает нужный набор на основе текущего locale.
Компоненты форм в React Aria, такие как DatePicker,
Slider и ComboBox, учитывают локаль при
форматировании и озвучивании:
Пример использования DatePicker с локалью:
import {DatePicker} from '@react-aria/datepicker';
import {useLocale} from '@react-aria/i18n';
function LocalizedDatePicker() {
let {locale} = useLocale();
return <DatePicker locale={locale} />;
}
Для интерфейсов с несколькими языками важно уметь менять локаль на лету:
import {LocaleProvider} from '@react-aria/i18n';
function App({locale}) {
return (
<LocaleProvider locale={locale}>
<MainUI />
</LocaleProvider>
);
}
LocaleProvider распространяет выбранную локаль по всем
дочерним компонентам, обеспечивая согласованное форматирование чисел,
дат и текста.
useLocale и
LocaleProvider для поддержки разных языков.messages для
каждой локали.locale.Это позволяет создавать полностью локализованный интерфейс, соответствующий стандартам доступности и удобства для пользователей из разных регионов.