Интернационализация
Весь текст @lh-ui/react берётся из @lh-ui/share/locales; сама библиотека не хранит никаких копий текстов.
Языковые пакеты
Встроены два языковых пакета, оба можно импортировать напрямую из входа пакета:
import { zhCN, enUS } from '@lh-ui/react'
| Пакет | Значение locale |
|---|---|
zhCN | zh-CN (по умолчанию) |
enUS | en-US |
Переключение через ConfigProvider
import { LhConfigProvider } from '@lh-ui/react'
export default function App() {
return (
<LhConfigProvider locale="en-US">
<YourApp />
</LhConfigProvider>
)
}
Внутри LhConfigProvider вызывает lhlocale.setLocale(locale) в useEffect; это применяется глобально (включая императивные сервисы вроде message).
Чтение в компонентах
Используйте useLhLocale(), чтобы получить функцию перевода:
import { useLhLocale } from '@lh-ui/react'
function Demo() {
const { t, tm, getLocale } = useLhLocale()
return (
<>
<p>Текущий язык: {getLocale()}</p>
<p>{t('input.placeholder')}</p>
{/* Второй аргумент t — динамическая интерполяция */}
<p>{t('form.required', 'Это поле обязательно')}</p>
</>
)
}
| Метод | Описание |
|---|---|
t(path, fallbackOrParams?) | Перевод; второй аргумент-строка служит запасным значением, объект — интерполируется; без него возвращается сам путь |
tm(path) | Получить исходное сообщение (записи в форме массива) |
getLocale() | Текущее значение locale |
version | Версия языкового пакета (используется внутри для запуска перерисовки) |
Реактивное обновление
useLhLocale подписывается на глобальный синглтон locale из share через useSyncExternalStore: любой вызов lhlocale.setLocale() автоматически перерисовывает все потребляющие компоненты.
import { lhlocale } from '@lh-ui/react'
// Императивное переключение (без участия ConfigProvider)
lhlocale.setLocale('en-US')
Расширение языковых пакетов
Языковой пакет — это обычный объект; его можно расширить самостоятельно и передать в LhConfigProvider. За структурой ключей обращайтесь к zhCN.
И серверный, и клиентский снимок useSyncExternalStore — это version, поэтому подписка никогда не вызывает рассогласования гидратации на сервере.