際化(zh-CN)配置全解析:locale 本地化方案與源碼實(shí)現(xiàn))
前端UI組件【免費(fèi)下載鏈接】rsuite A suite of React components .項(xiàng)目地址https://gitcode.com/gh_mirrors/rs/rsuite點(diǎn)擊查看免費(fèi)下載導(dǎo)讀本文將圍繞 RSuite 的DatePicker組件國(guó)際化配置展開(kāi)以中文zh-CN本地化為例講解如何通過(guò)locale屬性將日期選擇器的星期縮寫(xiě)、操作按鈕與時(shí)間單位文本一鍵切換為中文并結(jié)合倉(cāng)庫(kù)中的默認(rèn)語(yǔ)言包與類(lèi)型定義剖析locale的字段結(jié)構(gòu)、數(shù)據(jù)來(lái)源與底層合并機(jī)制幫助你掌握 RSuite 日期組件的完整本地化定制能力。一、問(wèn)題背景DatePicker 為什么需要 locale 配置RSuite 的DatePicker是一個(gè)集日歷、時(shí)間選擇于一體的復(fù)合組件其界面包含多類(lèi)需要翻譯的文本星期縮寫(xiě)日歷表頭的Su、Mo等對(duì)應(yīng)sunday、monday等字段快捷操作彈層底部工具欄的OK按鈕、快捷范圍Today/Yesterday時(shí)間單位時(shí)間視圖中的Hours/Minutes/Seconds列標(biāo)題。這些文案的默認(rèn)值定義在英文語(yǔ)言包中RSuite 為每種界面語(yǔ)言提供了完整的語(yǔ)言包見(jiàn) src/locales 目錄下 20 余個(gè)語(yǔ)言文件并允許開(kāi)發(fā)者通過(guò)組件上的locale屬性進(jìn)行局部覆蓋。二、最小實(shí)現(xiàn)在 DatePicker 上直接傳入中文文案在未引入全局CustomProvider的場(chǎng)景下最直接的中文本地化方式是像 intl-zh-cn.md 展示的那樣把中文文案直接寫(xiě)到DatePicker的locale屬性上import { DatePicker } from rsuite; const App () ( DatePicker formatyyyy-MM-dd HH:mm:ss w{260} locale{{ sunday: 日, monday: 一, tuesday: 二, wednesday: 三, thursday: 四, friday: 五, saturday: 六, ok: 確定, today: 今天, yesterday: 昨天, hours: 時(shí), minutes: 分, seconds: 秒 }} / ); ReactDOM.render(App /, document.getElementById(root));各字段含義如下字段示例值作用位置sunday~saturday日 / 一 / … / 六日歷面板星期表頭ok確定彈層底部工具欄的確認(rèn)按鈕DatePicker需配合時(shí)間模式使用today/yesterday今天 / 昨天預(yù)置快捷范圍按鈕hours/minutes/seconds時(shí) / 分 / 秒時(shí)間視圖各列標(biāo)題在源碼層面locale是DatePicker繼承自PickerBasePropsDatePickerLocale的基礎(chǔ)屬性見(jiàn) src/DatePicker/DatePicker.tsx組件內(nèi)部會(huì)將locale透?jìng)鹘o日歷容器與工具欄渲染。工具欄中的 OK 按鈕文本即取自locale?.ok見(jiàn) src/DatePicker/Toolbar.tsx。三、locale 字段的完整來(lái)源內(nèi)置 zh_CN 語(yǔ)言包DatePicker的locale并不要求你手寫(xiě)全部字段。RSuite 內(nèi)置的簡(jiǎn)體中文語(yǔ)言包 src/locales/zh_CN.ts 中日期與時(shí)間相關(guān)文案集中定義在DateTimeFormats對(duì)象中并被Calendar、DatePicker、DateRangePicker三組組件共享const DateTimeFormats { sunday: 日, monday: 一, tuesday: 二, wednesday: 三, thursday: 四, friday: 五, saturday: 六, ok: 確定, today: 今天, yesterday: 昨天, now: 此刻, hours: 時(shí), minutes: 分, seconds: 秒, formattedMonthPattern: yyyy年MM月, formattedDayPattern: yyyy年MM月dd日, shortDateFormat: yyyy-MM-dd, shortTimeFormat: aa hh:mm, dateLocale: zhCN as any };對(duì)比默認(rèn)英文語(yǔ)言包 src/locales/en_GB.ts 可以看到除界面文本翻譯外中文語(yǔ)言包還一并定制了formattedMonthPattern月份標(biāo)題格式中文為yyyy年MM月formattedDayPattern完整日期格式中文為yyyy年MM月dd日shortDateFormat無(wú)format屬性時(shí)的回退格式中文為yyyy-MM-ddshortTimeFormat12 小時(shí)制下的時(shí)間格式中文為aa hh:mmdateLocale透?jìng)鹘o底層日期工具庫(kù) date-fns 的本地化對(duì)象用于周起始日等日歷語(yǔ)義計(jì)算。其中shortDateFormat在組件中的實(shí)際生效位置是const formatStr format || locale?.shortDateFormat || yyyy-MM-dd見(jiàn) src/DatePicker/DatePicker.tsx也就是說(shuō)顯式傳入format時(shí)優(yōu)先使用format否則回退到locale.shortDateFormat。四、TypeScript 視角DatePickerLocale 的類(lèi)型邊界locale屬性接受的是DatePickerLocale類(lèi)型其定義位于 src/locales/index.tsexport type DatePickerLocale PickKeystypeof defaultLocale.DatePicker CommonLocale;其中PickKeysT將所有字段轉(zhuǎn)為可選CommonLocale則包含loading、emptyMessage、remove、clear等通用文案見(jiàn) src/locales/zh_CN.ts。這意味著你不必一次性提供全部字段缺省的字段會(huì)回退到默認(rèn)英文語(yǔ)言包由于類(lèi)型來(lái)自默認(rèn)語(yǔ)言包en_GB的結(jié)構(gòu)字段名拼寫(xiě)錯(cuò)誤會(huì)在編譯期直接暴露通過(guò) CommonLocale交叉類(lèi)型DatePicker的locale也支持通用文案的覆蓋。值得注意的細(xì)節(jié)是雖然DatePickerLocale的字段結(jié)構(gòu)源于英文語(yǔ)言包但locale的值并不受語(yǔ)言限制——傳入日/一/二等任意文案都是合法的這正是“局部覆蓋”機(jī)制得以成立的原因。五、生產(chǎn)實(shí)踐三種本地化方案的取舍1. 組件級(jí)內(nèi)聯(lián)示例文檔采用的方式直接寫(xiě)在locale屬性上適合“僅個(gè)別組件需要中文”的場(chǎng)景。優(yōu)點(diǎn)是零配置、改動(dòng)局部化缺點(diǎn)是每個(gè)DatePicker都要重復(fù)書(shū)寫(xiě)不利于多組件統(tǒng)一切換。2. 引入完整語(yǔ)言包并按需覆蓋從rsuite/locales引入預(yù)打包的zh_CN語(yǔ)言包再對(duì)個(gè)別字段做覆蓋可以兼顧完整性與靈活性import { DatePicker } from rsuite; import zhCN from rsuite/locales/zh_CN; const App () ( DatePicker formatyyyy-MM-dd HH:mm:ss w{260} locale{{ ...zhCN.DatePicker, ok: 確認(rèn) }} / );注意語(yǔ)言包文件中DatePicker段的字段與DateTimeFormats完全一致因?yàn)閦h_CN.ts中DatePicker: DateTimeFormats正是對(duì)其的引用見(jiàn) src/locales/zh_CN.ts。3. 全局注入推薦用于全站統(tǒng)一語(yǔ)言通過(guò)CustomProvider在應(yīng)用根部注入zhCN語(yǔ)言包所有組件無(wú)需逐個(gè)傳locale即可獲得中文文案這是多語(yǔ)言站點(diǎn)最常規(guī)的做法。組件級(jí)locale的優(yōu)先級(jí)高于全局配置可用于局部微調(diào)例如將“確定”改為“確認(rèn)”。六、驗(yàn)證與拓展從測(cè)試用例看 locale 的行為約定在倉(cāng)庫(kù)測(cè)試中可以找到對(duì)日期組件 locale 行為的直接驗(yàn)證DatePicker與DateRangePicker的測(cè)試均覆蓋了工具欄按鈕文案、快捷范圍等 locale 相關(guān)斷言見(jiàn) src/DatePicker/test/Toolbar.spec.tsx 與 src/DatePicker/test/DatePicker.spec.tsx。這印證了以下幾點(diǎn)實(shí)現(xiàn)約定locale.ok決定工具欄確認(rèn)按鈕文本且按鈕通過(guò)disableOkBtn支持禁用態(tài)聯(lián)動(dòng)快捷范圍today、yesterday等的文案由locale驅(qū)動(dòng)hideOkBtn為真且無(wú)快捷范圍時(shí)工具欄整體不渲染。此外語(yǔ)言包結(jié)構(gòu)還提示了一個(gè)可復(fù)用結(jié)論DateRangePicker的語(yǔ)言段繼承DateTimeFormats并額外擴(kuò)展了last7Days見(jiàn) src/locales/zh_CN.ts因此同一套星期/時(shí)間單位文案在多日期組件間保持一致。七、小結(jié)DatePicker的中文本地化由三部分協(xié)同完成組件級(jí)locale屬性提供局部覆蓋能力、內(nèi)置zh_CN語(yǔ)言包提供開(kāi)箱即用的完整中文文案、DatePickerLocale類(lèi)型保證字段結(jié)構(gòu)與默認(rèn)語(yǔ)言包對(duì)齊。理解locale字段與DateTimeFormats的映射關(guān)系以及format→shortDateFormat的回退鏈路即可在單組件局部定制與全站統(tǒng)一語(yǔ)言之間自如切換讓日期選擇界面真正貼合目標(biāo)語(yǔ)言的使用習(xí)慣。贊分享前端UI組件【免費(fèi)下載鏈接】rsuite A suite of React components .項(xiàng)目地址https://gitcode.com/gh_mirrors/rs/rsuite點(diǎn)擊查看免費(fèi)下載相關(guān)推薦rsuite DatePicker 國(guó)際化與本地化通過(guò) locale 屬性和內(nèi)置 i18n 體系定制多語(yǔ)言日期時(shí)間組件rsuite DatePicker 國(guó)際化與本地化通過(guò) locale 屬性和內(nèi)置 i18n 體系定制多語(yǔ)言日期時(shí)間組件 導(dǎo)讀 rsuite 的 DatePic前端UI組件嵌入式系統(tǒng)開(kāi)發(fā)新范式IndustrialCoder助力STM32固件自動(dòng)生成嵌入式系統(tǒng)開(kāi)發(fā)新范式IndustrialCoder助力STM32固件自動(dòng)生成 嵌入式系統(tǒng)開(kāi)發(fā)正在經(jīng)歷一場(chǎng)革命性的變革隨著AI技術(shù)的飛速發(fā)展Industriant-design DatePicker 國(guó)際化配置實(shí)戰(zhàn)從 locale 參數(shù)到時(shí)區(qū)與語(yǔ)言定制ant design DatePicker 國(guó)際化配置實(shí)戰(zhàn)從 locale 參數(shù)到時(shí)區(qū)與語(yǔ)言定制 ant design 的 DatePicker 系列組件DUI組件前端設(shè)計(jì)系統(tǒng)上一篇【親測(cè)免費(fèi)】 ncc簡(jiǎn)化Node.js模塊打包的利器下一篇LazyAdmin 使用指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考