Задавайте язык и направление письма документа на сервере. Формируйте <html lang={locale} dir={direction}> по маршруту, чтобы вспомогательные технологии, алгоритм двунаправленного текста браузера и стили :lang() получали правильные значения уже при первой отрисовке. Не определяйте локаль в клиентском коде после гидратации.
Подписи компонентов
Передавайте переведённые строки через свойство labels компонента. Для подписей со счётчиками используйте строковые шаблоны, например "{index} of {count}"; для форматирования чисел передавайте locale. Функция formatLabel подставляет значения вместо именованных заполнителей и форматирует числа с помощью Intl.NumberFormat.
Направление и размещение
Направление определяется по атрибуту dir элемента в DOM. Поведение клавиатуры учитывает его через resolveDirection(element); явно заданное свойство направления может его переопределить. Свойство side всплывающего элемента задаёт физическую сторону (top, bottom, left, right). Свойство align задаёт логическое выравнивание (start, center, end) и учитывает направление письма.
Собственная обработка клавиатуры
Если поле ввода использует IME, дождитесь завершения композиции, прежде чем обрабатывать клавиши навигации. Проверяйте isComposingKeyEvent(event) перед обработкой Enter, стрелок или Escape; это учитывает и браузеры, которые сообщают код клавиши 229 после завершения композиции.
Типографика и резервный вариант
Таблица стилей выбирает шрифты и правила переноса с учётом письменности через :lang(). Переопределите --font-sans-ja, --font-sans-zh-hans или --font-sans-ar, если приложение предоставляет собственные шрифты. Оборачивайте непереведённый английский текст в lang="en" dir="ltr", чтобы в другой локали сохранялись английское произношение, выбор шрифтов и порядок текста.