Xcode技巧系列:http://www.reibang.com/notebooks/7639304/latest
如果希望應(yīng)用能夠跨越國(guó)界台丛,支持不同的語(yǔ)言和地區(qū),那么,我們就需要做國(guó)際化和本地化了。
1.添加國(guó)際化
要支持某一種語(yǔ)言,我們需要把該語(yǔ)言添加到項(xiàng)目中世囊。步驟:
選擇項(xiàng)目文件->選擇項(xiàng)目->Info選項(xiàng)卡->Localizations列表,這里管理:
Resources顯示了該語(yǔ)言所本地化的文件數(shù)量窿祥。
Use Base Internationalization選項(xiàng)株憾,勾選后,Xcode在開發(fā)者沒有提供所在語(yǔ)言和地區(qū)的本地化版本晒衩,就會(huì)載入基本版本嗤瞎。如果沒有勾選,那么開發(fā)者必須要提供支持每一個(gè)語(yǔ)言對(duì)應(yīng)的本地化版本听系。
取消該選項(xiàng)贝奇,會(huì)出現(xiàn):
這里選擇the trash:移除文件到廢紙簍,或者移動(dòng)到指定的語(yǔ)言文件中靠胜。
點(diǎn)擊+號(hào)掉瞳,可以添加要支持的語(yǔ)言,一旦項(xiàng)目支持兩個(gè)以上的語(yǔ)言浪漠,則項(xiàng)目就支持國(guó)際化了陕习。
添加簡(jiǎn)體中文,出現(xiàn)上圖對(duì)話框址愿。
其中该镣,F(xiàn)ile Types有兩個(gè)選擇:
Localizable string本地化為字符串,會(huì)新建一個(gè).strings文件必盖,只需要替換字符串即可拌牲。不同的語(yǔ)言俱饿,都用的一套stroyboard或xib文件歌粥,只是替換IB文件字符串即可。
Interface builder ...本地化為...拍埠,會(huì)創(chuàng)建一套新的storyboard或xib文件失驶,相當(dāng)于是每一種語(yǔ)言就是一套storyboard或xib文件。各種語(yǔ)言之間的IB關(guān)聯(lián)操作不會(huì)影響枣购。
2.Localizable String的方式
當(dāng)我們添加了別的語(yǔ)言嬉探,選擇Localizable string后擦耀,項(xiàng)目里的storyboard文件或xib文件就會(huì)出現(xiàn)對(duì)應(yīng)的視圖字符串文件(.strings文件),如圖:
修改該文件的內(nèi)容格式:
該文件需要注意的地方就是涩堤,結(jié)尾的";"不能少眷蜓,其中ObjectID在IB里面,點(diǎn)擊你要本地化的控件胎围,選擇第三個(gè)身份檢查器吁系,就能看的ObjectID了。
依次找到需要本地化的控件白魂,填入.strings文件內(nèi)即可汽纤。
3.Interface builder ...的方式
當(dāng)選擇該方式后,會(huì)出如圖所示:
我們創(chuàng)建了一個(gè)日語(yǔ)的版本福荸,選擇的是Interface builder...的方式蕴坪,發(fā)現(xiàn)多處了一個(gè)Storyboard,此時(shí)敬锐,我們可以修改日語(yǔ)的文字為999背传,模擬器選擇日語(yǔ)版本,運(yùn)行滞造,發(fā)現(xiàn)续室,文字本地化為999了。
4.自定義文本的本地化
上面的方式是在IB中創(chuàng)建的控件谒养,但是很多時(shí)候挺狰,一些文本信息是在代碼中確定的,這時(shí)候买窟,我們需要對(duì)代碼中的文本信息進(jìn)行自定義本地化丰泊。
首先添加一個(gè)strings文件,F(xiàn)ile->new->file->iOS->Strings File文件創(chuàng)建始绍。文件名稱最好命名為L(zhǎng)ocalizable瞳购,因?yàn)槟J(rèn)是去找項(xiàng)目中的該文件進(jìn)行本地化。
創(chuàng)建好后亏推,選中該文件学赛,在檢查器中,選擇需要添加本地化的語(yǔ)言:
然后Localizable.strings能夠展開吞杭,如圖:
我們?cè)谛枰恼Z(yǔ)言文件里添加盏浇,比如,在簡(jiǎn)體中文添加:
//千萬注意芽狗,有分號(hào)結(jié)尾>铌!!滴劲!
Hello_String = "你好";
也可以這樣寫:"Hello_String" = "你好"
在英文中添加:
Hello_String = "hello";
在日語(yǔ)中添加:
Hello_String = "dddd";
在代碼里攻晒,需要用的地方使用:
let str = NSLocalizedString("Hello_String", comment: "")
//comment:對(duì)key的注釋,可以不填
print(str)
結(jié)果可以看到班挖,打印了dddd(由于模擬器剛剛選擇了日語(yǔ)為本地語(yǔ)言):
如果說沒有找到對(duì)應(yīng)的本地化語(yǔ)言翻譯鲁捏,會(huì)顯示鍵名,比如
這個(gè)是很有用的萧芙,假如我們漏掉了一兩個(gè)沒有翻譯碴萧,也會(huì)顯示鍵名,不會(huì)出現(xiàn)空白的情況末购。
5圖片本地化
圖片本地化的話破喻,由于資源文件不允許出現(xiàn)相同名稱的圖片,我可以用另外一種方法盟榴,將圖片的名稱修改為需要的各種語(yǔ)言不同的名稱曹质,然后通過上方自定義本地化文件的方式,寫入到不同語(yǔ)言的本地化文件中擎场,加載的時(shí)候通過
UIImage(named: imageNmae)
的方式加載不同語(yǔ)言環(huán)境下不同的圖片羽德。