App國際化
跟著我汤求,一起創(chuàng)建一個(gè)國際化的App
過程
創(chuàng)建工程:ZXQBKAppLocalizationTest
在ViewController.m寫幾行需要國際的Macro(NSLocalizedString等)
NSString *name = NSLocalizedString(@"name", @"名字");
NSString *country = NSLocalizedString(@"country", @"國家");
- 修改ZXQBKAppLocalizationTest的development language怠益,
- info.plist -> Localization native development region : zh-Hans;
- open ZXQBKAppLocalizationTest.xcodeproj馋嗜,修改developmentRegion = zh-Hans;
-
重新啟動(dòng)xcode會(huì)發(fā)現(xiàn)zh-Hans成為了development language
圖片4-1
- 在工程目錄下genstrings導(dǎo)出development language的strings file。
find . -name \*.m | xargs genstrings -o .
ls 多了一個(gè)文件Localizable.strings懒叛,文件內(nèi)容:
comment
key = value的形式勇蝙。
這里會(huì)發(fā)現(xiàn)我們的main.storybord和launchScreen.storybord多出一個(gè).strings文件豺鼻。
-
將4步中的Localizable.strings導(dǎo)入工程综液。
5-1
你會(huì)發(fā)現(xiàn)value就是key,原因:development language默認(rèn)會(huì)把key作為user-face text儒飒∶ǎ可我們希望value是中文。
我們需要將strings文件導(dǎo)出為zh-Hans.xliff,如果我們用editor -> export Localizations會(huì)發(fā)現(xiàn)export的.xliff的target為空附帽,那么這個(gè).xliff就無法import到工程里埠戳。解決的方法是:用命令行。
xcodebuild -exportLocalizations -localizationPath <dirpath> -project <projectname> [[-exportLanguage <targetlanguage>]]
例如:xcodebuild -exportLocalizations -localizationPath ~/desktop -project ZXQBKAppLocalizationTest.xcodeproj -exportLanguage zh-Hans
我們會(huì)發(fā)現(xiàn)./desktop里多了一個(gè)zh-Hans.xliff文件蕉扮。(我用的支持xliff格式的第三方免費(fèi)工具:XLIFFTool整胃,appstore有)

我們可以看到source=zh-Hans,target=zh-Hans喳钟,倘若你的target=?爪模,那么.xliff是無法import工程里的。
我們需要把Localizable.strings的target用中文替換荚藻。
-
import zh-Hans.xliff到工程里
我們會(huì)發(fā)現(xiàn)strings文件已經(jīng)改變了
8-1
我的運(yùn)行結(jié)果
8-2 -
添加另一種語言:英語
圖9-3
Resource選擇zh-Hans:
9-1
工程文件:
9-2
查看:Localzable.strings(English)
9-4
發(fā)現(xiàn):文件里面的內(nèi)容和zh-Hans一模一樣。
思考:因?yàn)槲覀僐esource選擇的是zh-Hans洁段,所以這個(gè)文件和zh-Hans一樣应狱。不妨我們修改Localzable.strings(English)的內(nèi)容,再導(dǎo)入一個(gè)日文祠丝,以en為Resource疾呻。
修改en的value為英文
9-6
Resource選為en
9-5
Localzable.strings(japanese)的value為英文。果然添加一個(gè)新語言時(shí)写半,value由Resource決定岸蜗。
9-7 -
使用 editor export en.xliff
10-2
打開文件:
10-3
發(fā)現(xiàn):Source為中文,而不是key叠蝇。
思考:我們思維定式會(huì)認(rèn)為key,value,comment這樣璃岳,但是這里發(fā)現(xiàn)是這個(gè)source感覺是zh-Hans的value。那么到底是不是呢悔捶,不妨修改Localzable.strings(chinese(simplified))的國家->國家哈哈铃慷。
10-4
export en.xliff看看

發(fā)現(xiàn):source變成“國家哈哈”了。
思考:如果這個(gè)source就是我們zh-Hans的value的話蜕该,那么我們就好理解了犁柜。項(xiàng)目組的translator不應(yīng)該是根據(jù)key(程序員定的),而是應(yīng)該根據(jù)value(user-text的實(shí)際內(nèi)容)來翻譯的堂淡。
- 測(cè)試一下我們的英文馋缅。
12-1
12-2