跳到主要內容

國際化

@lh-ui/react 的文案全部來自 @lh-ui/share/locales,本庫不持有任何文案副本。

語言包​

內建兩個語言包,均可從包入口直接引入:

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 的第二個參數是動態插值 */}
<p>{t('form.required', '此项为必填')}</p>
</>
)
}
方法說明
t(path, fallbackOrParams?)翻譯,第二參數為字串時作兜底、為物件時作插值;缺省時回退到路徑原文
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,伺服器端不會因訂閱產生水合不匹配。