iOS項目:國際化翻譯端和開發(fā)端自動同步

? ? ?作為iOS開發(fā)實習生生涯的第一個任務,就是喊我調研一個國際化方案,最好是可以實現(xiàn)開發(fā)人員這邊不用擔心翻譯的問題,只在意寫代碼;然后翻譯端那邊只管翻譯,同步工作自動化完成。

? ? 做過iOS項目國際化的應該都知道痛點,所有需要翻譯的字段都需要挨個添加到Localizable.strings或者其他的一些strings文件里面,這就需要翻譯端那邊提供翻譯,然后開發(fā)人員這邊挨個添加到里面。 ? 而我的工作就是減少這一步,讓開發(fā)人員只關心寫代碼。

? ?我的思路是這樣的:


? 思路很簡單,但是要怎么去實施呢?

? ? ?在開發(fā)端:Xcode6之后可以支持導出xliff文件,什么是xliff文件呢?xliff 文件其實就是 針對 string - translation - comment 的一個文件 ?,具體導出過程和導入在百度或者谷歌上搜索可以搜索到大片。xliff文件里面包含了所有需要翻譯成其他語言的關鍵字,并且你只需要在開發(fā)代碼的過程中,將需要翻譯的字段通過NSLocallizedString關鍵字進行標記,導出的時候它會自動獲取并導出被NSLocallizedString標記了的關鍵字。而xliff文件是基于xml樣式的,這個下面會講。類似于這樣:


? ? 翻譯端:翻譯端這邊給我的要求是,他們只需要關心翻譯或者增加刪除修改需要翻譯的關鍵字以及翻譯過后的字段(很繞口 ? 逃。 ? 所以這時候就出現(xiàn)了問題,最開始我想到的是寫一個web端來對xliff文件進行解析,把關鍵字提取出來供他們翻譯,但是僅僅是用前端的話,當翻譯后的文件需要重新下載,它很難自動對本地的文件直接進行操作。而!翻譯端那邊又要求 ,他們覺得下載這個過程太麻煩,不要這個過程;這就很難受了,最后我想了下,最后敲定用客戶端(python)來實現(xiàn)這個方式。(當時我其實沒接觸過python和前端的開發(fā),所以這倆個難度對我來說差別不大)

? 協(xié)作工具當然可以用svn或者git來實現(xiàn),作為現(xiàn)在多人協(xié)助的中間工具,簡直不能太適合。

? 好了,現(xiàn)在背景大概介紹清楚了(我猜應該清楚了。下面開始說說操作流程:

? ? 開發(fā)端在開發(fā)的時候首先利用NSLocallizedString ?對需翻譯字段進行標記 ? ? ---> ? ? 在某一特定的時候利用Xcode將xliff文件導出,并上傳到git(這里我是寫的腳本,) ? ---> ? ?翻譯端在打開客戶端的時候,先從git上面pull一次xliff文件,然后讀入文件 ? ?-----> ? ?呈現(xiàn)信息,翻譯中...... ? ----> ? 翻譯后,點擊保存后會將翻譯后的自動添加到xliff文件里面,然后上傳到git ? ? ?-----> ? 開發(fā)端在每次編譯或者安裝編譯的時候自動從git上面pull xliff文件(這里我也是用腳本做的)


? ? 現(xiàn)在流程大概介紹清楚了(我猜應該清楚了。下面開始說說開發(fā)思路:

? ? ?翻譯端( 客戶端):首先需要三個文件:1、python源代碼(翻譯人員操作的客戶端) ?2、需要解析的xliff文件 ?3、 一個保存關鍵字和翻譯后字段的文件,我這里用的是excel表格。

? ? 首先在客戶端運行的時候,會自動從git上面pull一次xliff文件(因為有可能在開發(fā)端那邊增加了字段,pull一次就可以實時同步),然后把xliff里需要翻譯的關鍵字提取出來(因為xliff文件是基于xml格式的,所以提取還是蠻容易的),然后根據提取的字段放入excel表格里面,類似于這樣:


然后在python寫的客戶端是這樣的:


點擊讀入按鈕后,會呈現(xiàn)左邊的文本。呈現(xiàn)出來的文本是直接從excel文件里面讀的(因為對于xliff的操作是開發(fā)和翻譯都會對它進行操作,所以很可能造成沖突)。 ? -----> ? ?直接對左邊文本進行修改和操作,修改完后點擊保存,會進行先對excel進行復寫修改,然后根據excel文件的內容對xliff的文件進行修改,并上傳到git。


以上就是客戶端(翻譯端)這邊的開發(fā)思路,下面是開發(fā)端:

? ? 開發(fā)端這邊就比較簡單了,寫一個腳本,腳本的思路是:每次項目build的時候使用git的diff指令(diff指令是拿項目與本地倉庫進行比對,不同的地方會輸出),將輸出保存成文本,然后對文本進行遍歷,如果出現(xiàn)類似于NSLocallizedString ? ?的關鍵字(代表項目里面有標記需要翻譯的字段),就會進行以下操作:首先,對xliff文件進行一次pull,因為可能翻譯端那邊對翻譯有進行改變;其次,根據情況判斷是否需要對項目里的xliff文件重新導出(因為可能在開發(fā)端這邊有新增加的需要翻譯的字段);然后讓xliff文件與excel文件進行比對修改,因為excel是主要保存翻譯的,無論項目里面是否來得及或者沒有寫上需要翻譯的東西,只要翻譯端那邊翻譯了的字段就會在excel里面出現(xiàn);然后上傳并導入xliff文件。


好了,通過上面的一些講解和開發(fā)思路,我想實時同步開發(fā)和翻譯倆個端的數據是可以實現(xiàn)的,可能上面的講解對于沒接觸過國際化的人來說并不是很詳細,但是我想做過國際化的人來說應該是能看懂的,如果有不懂的可以聯(lián)系我vx:zx4652737,也可以給我留言。


后續(xù)補充:以上的思路并未考慮到項目的大小,若項目過大,導出和導入xliff文件都會消耗大量的時候,這是在編譯的時候承擔不起的;那么我們就可以換一種思路:在特定的時候去執(zhí)行一次導出和導入操作,比如在項目打包的時候去做一次,或者在翻譯端那邊給出一個反饋之后去做一次。這樣算是一種在時機上的一種優(yōu)化。

demo地址

demo可能需要自己去配一下路徑

如果本文章有點幫助的,請給小弟一個贊鼓勵下 嘿嘿

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,667評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,500評論 19 139
  • 之前一直在糾結于自己是一個家庭主婦,沒理想沒人生??赐瓯緯也琶靼?,其實作為女人,家庭是最為珍貴的。對生活充滿熱...
    菜小東西閱讀 164評論 0 1
  • 看了今天的文章感受到很多暖意,人的認知改變竟能產生如此大的效果,給自己的生活帶來切實的改變。今天的文章是關于見得別...
    雅倩1120閱讀 171評論 0 0
  • Docker 是一個開源的應用容器引擎。 Docker的應用場景 Web 應用的自動化打包和發(fā)布。 自動化測試和持...
    萬總有點菜閱讀 290評論 1 1

友情鏈接更多精彩內容