メインコンテンツへスキップ

国際化

@lh-ui/react の文言はすべて @lh-ui/share/locales に由来し、本ライブラリは一切の文言の複製を持ちません。

言語パック​

2 つの言語パックを内蔵しており、どちらもパッケージのエントリから直接インポートできます:

import { zhCN, enUS } from '@lh-ui/react'
言語パックlocale 値
zhCNzh-CN(デフォルト)
enUSen-US

ConfigProvider で切り替える​

import { LhConfigProvider } from '@lh-ui/react'

export default function App() {
return (
<LhConfigProvider locale="en-US">
<YourApp />
</LhConfigProvider>
)
}

LhConfigProvider は内部で useEffect の中に lhlocale.setLocale(locale) を呼び出し、グローバルに有効になります(命令的サービス 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 の第 2 引数は動的補間 */}
<p>{t('form.required', 'この項目は必須です')}</p>
</>
)
}
メソッド説明
t(path, fallbackOrParams?)翻訳。第 2 引数が文字列の時はフォールバック、オブジェクトの時は補間。省略時はパスの原文にフォールバック
tm(path)生のメッセージを取得(配列形態のエントリ)
getLocale()現在の locale 値
version言語パックのバージョン番号(内部的に再描画の発火に使用)

レスポンシブな更新​

useLhLocale は useSyncExternalStore で share のグローバル locale 単例を購読します:どこから lhlocale.setLocale() を呼んでも、すべての消費コンポーネントが自動的に再描画されます。

import { lhlocale } from '@lh-ui/react'

// 命令的な切り替え(ConfigProvider を経由しない場合)
lhlocale.setLocale('en-US')

言語パックの拡張​

言語パックは通常のオブジェクトで、独自に拡張して LhConfigProvider に渡せます。キーの階層構造は zhCN を参照してください。

SSR

useSyncExternalStore の server snapshot と client snapshotはどちらも version で、サーバー側で購読によるハイドレーションの不一致は起きません。