最近參與公司兩個國外項目,項目須要對中文替換爲葡語和英語,項目重要、時間緊張,正常開發完後須要對中文詞條替換成一個方法。vue
如: var open = '打開'
替換爲 var open = intl.get('須要記錄的key值').d('打開')
react
由於以前還沒工具的時候,只能一個個替換,給key值取名、查看是否重複、查看是否有遺漏...非常浪費時間git
一次國際化的任務中,一個同事十幾分鍾完成了我一天須要完成的工做量,讓我感受發現了新大陸,一行命令就能替換80%左右的正確內容,速度固然是很快啦!github
可是查找和修改其中的錯誤也是一個極其痛苦的過程,人老是不知足於如今,但願能夠更好。npm
同事用的方法是讀取文件中的內容,而後根據正則匹配到中文片斷,而後進行替換。此舉寫起來比較簡單,麻煩的是寫出能最大限度的匹配到正確內容,並替換成正確的形式。同事寫的小工具之傳送門數組
由於對於同事的小工具,我以爲還差一點,並且擴展性可能還不夠,我想作更多更自由的一些操做可能會比較麻煩,並且要是有什麼新的狀況出現也不太好擴展。 重點是正則好長,我不想看(雖然我也曾迷戀過正則)。babel
在同事小工具的啓發下,我想着有什麼更加優雅的辦法,脫腦而出的就是爲何不能解析文件,找到是字符串的地方,而後判斷是否是中文,是的話就進行替換,想法是差很少的,可是我決定將文件代碼轉換成 ast 的形式,在這個基礎上進行替換操做。dom
在這個基礎上我開發了一個 i18n-ast的小工具工具
簡單的說一下這個工具,用了那些模塊測試
截止9.17日發佈了0.1.3版本能覆蓋大部分場景
主要分爲3步,安裝,寫命令行或配置文件,執行
使用 npm:
npm install --save-dev i18n-ast
複製代碼
使用 yarn:
yarn add i18n-ast --dev
複製代碼
i18n-ast -e [path] -o [path] -x [path]
複製代碼
module.exports = () => ({
entry: "須要轉換的文件路徑",
output: "輸出的文件路徑",
//排除的文件(類型是數組)
exclude: [],
//能夠自定義隨機字符串,第一個參數是當前文件的路徑
randomFuc: (filePath) => `${filePath.split('/').pop()}-${Math.random()}`
})
複製代碼
轉換前
轉換後
翻譯詞條提取
如圖所示,翻譯的過程都挺完美的,如今暫時只支持 react,可是我給 vue 留了空位,有興趣的小夥伴能夠給個star,一塊兒維護這個項目。
項目在github地址是 github.com/unStone/i18…
若是沒有太大的需求的話我會按照如下計劃慢慢維護,畢竟我仍是得工做的,大部分精力仍是得用在工做上