如何優(yōu)雅的完成iOS國際化

上網(wǎng)隨便翻翻,關(guān)于iOS國際化的文章層出不窮,我看到過很多很好的方法,有很多也是我以前用過的方法。從我的iOS開發(fā)生涯到現(xiàn)在已經(jīng)有五個(gè)年頭了,雖然去到企業(yè)里的項(xiàng)目基本上都是面對(duì)國內(nèi)用戶的,但是我的個(gè)人項(xiàng)目我都會(huì)做一下國際化,因此也會(huì)有很多海外用戶來下載我的App.

但是,自己一點(diǎn)小應(yīng)用含有需要國際化的內(nèi)容較少,即便是這樣做國際化的時(shí)候也踩了很多坑:

  • Localizable.strings這個(gè)文件名可不能寫錯(cuò)了,包括大小寫,否則會(huì)很困惑為啥沒效果。
  • 是項(xiàng)目做完再進(jìn)行國際化,還是做之前就搭建好呢?如果下一期加了很多需要國際化的內(nèi)容怎么辦呢?要一個(gè)一個(gè)手動(dòng)添加嗎?
  • Storyboard里面會(huì)自動(dòng)生成國際化的內(nèi)容,但是如果我添加了一個(gè)按鈕,或者刪掉了一個(gè)label呢?重新生成or手動(dòng)修改?
  • 國際化的內(nèi)容帶有參數(shù)怎么辦?比如中文“共有10臺(tái)電腦”英文則是 '10 computers in total' 這又怎么辦呢?

帶著這些疑問我來到了WWDC2018,也很開心的得到了答案,之所以今天才分享出來,也是因?yàn)槲覄倓偼瓿闪艘豢顜椭_發(fā)者更好完成國際化的工具-----XliffTool, 有了它,再有了你對(duì)我后面所介紹的內(nèi)容的理解,相信能幫助你省下很多時(shí)間來完成國際化。

如何更優(yōu)雅的完成國際化?

既然都說了要優(yōu)雅,就不要那么多繁瑣的配置和需要謹(jǐn)記的步驟,依照下面幾步就好:

1、選擇project,添加你需要的語言,如果勾選了下面的Use Base Internationalization就會(huì)把當(dāng)前開發(fā)語言作為base語言,Localization native development region 可以在項(xiàng)目的info.plist中設(shè)置。

image.png

2、選中項(xiàng)目,因?yàn)橹挥羞x中項(xiàng)目菜單中才能出來相應(yīng)的選項(xiàng),接下來在菜單中點(diǎn)擊Editor->Export For Localization... 然后選擇導(dǎo)出的目錄(如桌面)

image.png

導(dǎo)出的文件夾目錄結(jié)構(gòu)如下:


image.png

3、打開Localized Contents文件夾里的.xliff文件進(jìn)行翻譯

image.png

如果你是用MAC來翻譯,有一些工具可以幫助你編輯xliff文件,如果你想用iPhone或者iPad來編輯這個(gè)文件,就可以用我開發(fā)的XliffTool了。

軟件界面

特別是如果你有個(gè)會(huì)日文或者會(huì)英文的朋友,他有一部iPhone, 你想讓他幫你做國際化,那么把日文目錄下的xliff文件發(fā)給他就好了,然后他用XliffTool打開翻譯后再把文件發(fā)給你。(強(qiáng)行設(shè)定一個(gè)使用場(chǎng)景)

4、當(dāng)翻譯完成后再選中項(xiàng)目, 接下來在菜單中點(diǎn)擊Editor->Import Localization... 選擇翻譯好的語言對(duì)應(yīng)的xliff文件導(dǎo)入就好,現(xiàn)在國際化就完成了。

5、其他問題

1、 如果我后面加了很多字段怎么辦? 如果storyboard增加了很多元素怎么辦?
重復(fù)上面的步驟,會(huì)自動(dòng)添加未翻譯內(nèi)容。

2、如果翻譯的內(nèi)容帶參數(shù)怎么辦?
舉個(gè)??:

let numberOfPeople = 1
let numberOfCmoputer = 10
let text = NSString.localizedStringWithFormat(NSLocalizedString("%ld people and %ld computers in total", comment: "") as NSString, numberOfPeople, numberOfCmoputer)

導(dǎo)出后會(huì)生成原內(nèi)容

%ld people and %ld computers in total

翻譯成

共有 %1$ld 人和 %2$ld 臺(tái)電腦

即可。
3、如果我手動(dòng)在Localizable.strings文件里加了其他內(nèi)容怎么辦?
一樣導(dǎo)入導(dǎo)出xliff,不會(huì)丟。

4、導(dǎo)出的其他文件干嘛的?
導(dǎo)出的storyboard文件是給對(duì)方翻譯的時(shí)候可以對(duì)照界面翻譯用的,當(dāng)然需要mac下安裝xcode。 理論上只用管xliff文件就好。

總結(jié)

以上的步驟可以總結(jié)為

添加語言類型 -> 導(dǎo)出xliff -> 翻譯 -> 導(dǎo)入xliff

對(duì),就這么簡(jiǎn)單,你的國際化就做好了。

當(dāng)然要記得代碼里需要國際化的字符串使用NSLocalizedString 或者 [NSString localizedStringWithFormat...]

最重要的一點(diǎn)

所有的Localizable.strings等文件,全部會(huì)自動(dòng)生成,忘掉那些需要手動(dòng)完成的工作吧。

希望大家支持我的應(yīng)用XliffTool,讓我們的應(yīng)用走向世界吧。

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

友情鏈接更多精彩內(nèi)容