antd項(xiàng)目中國(guó)際化改造
項(xiàng)目中的國(guó)際化采用了react-intl-universal來實(shí)現(xiàn),如何使用可參考官網(wǎng),目前的做法是在原有intl.get基礎(chǔ)上包裝了一層,在項(xiàng)目中調(diào)用包裝后的函數(shù),然后通過腳本遍歷所有項(xiàng)目文件,找到包裝后的函數(shù),再根據(jù)函數(shù)中的參數(shù)導(dǎo)出一份excel,配合一些翻譯工具,自動(dòng)進(jìn)行翻譯。
但是這樣做有一些問題,首先就是寫法比較繁瑣,每次都要寫intl.get(key, default, value),其次就是通用的一些詞匯沒有辦法快速?gòu)?fù)用,因?yàn)閘ocal data都是根據(jù)腳本生成的,在使用intl時(shí)不知道有哪些公共的詞匯能夠復(fù)用,導(dǎo)致像新增、刪除這些通用的詞匯在項(xiàng)目中的各個(gè)地方都有定義,還有就是目前的腳本是通過遍歷整個(gè)項(xiàng)目文件來實(shí)現(xiàn),略微有些繁瑣,生成文件較慢。
我們期待的是可以像使用一個(gè)js對(duì)象那樣去進(jìn)行國(guó)際化,類似于這樣。

我們希望做到書寫簡(jiǎn)單,并且國(guó)際化配置文件可以自動(dòng)生成,統(tǒng)一管理。
那么如何修改呢?
我們其實(shí)可以這樣做,首先在項(xiàng)目中創(chuàng)建一個(gè)i18n的文件夾,來放置我們每個(gè)頁面的國(guó)際化文件。目錄結(jié)構(gòu)類似于這樣。

module中的文件內(nèi)容非常簡(jiǎn)單。

我們要做的就是根據(jù)module中的文件生成配置文件,以及供我們?cè)陧撁嬷羞M(jìn)行調(diào)用的i18n對(duì)象。

我們通過遞歸,將整個(gè)對(duì)象的value都變成intl.get的返回值。這樣,我們?cè)陧撁嬷芯涂梢灾苯舆@樣書寫,非常方便快捷。

我們還需要生成與之對(duì)應(yīng)的國(guó)際化配置文件,主要使用babel進(jìn)行操作。

如果我們需要傳遞參數(shù)進(jìn)到配置當(dāng)中,可以這樣操作。
定義時(shí)按照規(guī)則定義。

調(diào)用時(shí)將參數(shù)傳入

formatMessage函數(shù),templete在我們頁面調(diào)用時(shí)并不關(guān)心,只是為了我們使用babel生成配置文件時(shí)使用。

經(jīng)過這樣的簡(jiǎn)單處理,我們就能非常方便的進(jìn)行國(guó)際化操作,因?yàn)橛辛舜a提示,所以像一些通過的詞匯,都可以先到common根據(jù)英文查找,避免了一個(gè)詞匯到處都有的問題。