一催式、簡(jiǎn)介
所謂國(guó)際化就是讓你的APP能在不同國(guó)家的人們都能看懂悬而,即讓你APP中的語(yǔ)言跟隨系統(tǒng)變化呜舒,若系統(tǒng)當(dāng)前語(yǔ)言是英文,則你APP中顯示英文笨奠,若系統(tǒng)當(dāng)前語(yǔ)言是中文袭蝗,則APP顯示中文。廢話不多說(shuō)般婆,直接開始到腥。
二、 初始化蔚袍。
-
如下圖所示乡范,在工程中添加中文,當(dāng)然你還可以添加其他語(yǔ)言,這里只演示支持兩種語(yǔ)言篓足,英語(yǔ)和中文段誊。
- 點(diǎn)擊
Chinese(Simplified)(zh-Hans)
后,彈出如下圖界面:
三. App名稱國(guó)際化
- 新建
Strings File
文件栈拖,設(shè)置文件名為InfoPlist.strings
:
- 創(chuàng)建完成后连舍,你可以看到工程目錄結(jié)構(gòu)文件如下,單擊InfoPlist.strings涩哟,查看右邊的屬性索赏,在Localizable欄添加語(yǔ)言。
在InfoPlist.strings(English)
中添加:CFBundleDisplayName = "hello world";
在InfoPlist.strings(Chinese(Simplified))
的添加:CFBundleDisplayName = "世界 你好";
注意每句結(jié)尾有分號(hào)贴彼!
-
運(yùn)行程序潜腻,在中文環(huán)境下,你就可以看到:
在英文環(huán)境下:
四器仗、在Storyboard或Xib中設(shè)置多語(yǔ)言
在Storyboard或Xib中設(shè)置多語(yǔ)言有兩種方法融涣,Localizable.Strings
和InterfaceBuilder.String
。
-
Localizable.Strings
注意一下兩步:
首先把Storyboard中的勾去掉:
然后精钮,在Storyboard中威鹿,加入你需要的控件,當(dāng)你的布局基本完成之后轨香,注意忽你,一定是在你布局完成后,把剛才去掉的勾再選中臂容。這樣做的目的是讓Xcode自動(dòng)幫我們生成對(duì)應(yīng)的代碼科雳,而不需要我們自己去手寫,否則……大家試試就知道了:
可以看見多出了幾個(gè)文件脓杉,在這幾個(gè)文件中糟秘,國(guó)際化已經(jīng)做好了,我們只需要在對(duì)應(yīng)的文件中設(shè)置對(duì)應(yīng)的語(yǔ)言就OK了丽已。如果不按照上述步驟蚌堵,這兩個(gè)文件將沒有內(nèi)容,全部需要手敲沛婴。
上圖代碼中左邊的那一串編號(hào)是啥?那是每個(gè)控件的ObjectID督赤,這根據(jù)控件的ObjectID來(lái)設(shè)置值嘁灯,每個(gè)控件的ObjectID可以在下圖中找到,所以在后期如果額外需要添加幾個(gè)控件躲舌,仿照上面寫就可以了:
運(yùn)行程序丑婿,在中文下,可以看見:
在英文下可以看見:
建議:在Storyboard中全用中文,這樣方便后續(xù)找到這個(gè)控件羹奉,設(shè)置對(duì)應(yīng)的文字 -
InterfaceBuilder.String
InterfaceBuilder.String的使用方法與上述基本類似秒旋,在下圖我們可以看到,如果選用Interface Builder Storyboard方案诀拭,那么每種語(yǔ)言都有一套相應(yīng)的Storyboard迁筛,但是各個(gè)語(yǔ)言Storyboard間的界面改動(dòng)不關(guān)聯(lián),所以耕挨,還是先取消勾選细卧,當(dāng)界面布局完成后,再選中筒占。
這種方法會(huì)有多個(gè)Xib文件贪庙,不方便維護(hù),所以還是建議使用第一種方法翰苫。
五止邮、純代碼設(shè)置
如果沒有使用Xib或Storyboard,需要先新建一個(gè)Localizable.strings
奏窑,它是iOS默認(rèn)加載的文件导披,如果想用自定義名稱命名,在使用NSLocalizedString方法時(shí)指定tableName為自定義名稱就好了良哲,但你的應(yīng)用規(guī)模不是很大就不要分模塊搞特殊了盛卡。
創(chuàng)建完成后溶诞,記得勾選
English
和Chinese
:中文和英文設(shè)置分別如下:
一定要注意每一行結(jié)尾都有分號(hào)
在代碼中:
[self.button setTitle:NSLocalizedString(@"button", nil) forState:UIControlStateNormal];
NSLocalizedString(@"button", nil)
會(huì)去Localizable.strings
中找key為button
的value撵颊,上述設(shè)置在英文環(huán)境下顯示I'm button
描孟,在中文環(huán)境下顯示按鈕
屿愚。若沒有這個(gè)key顾瞪,則會(huì)直接返回key尼斧。例如:
[self.button setTitle:NSLocalizedString(@"123456", nil) forState:UIControlStateNormal];
在Localizable.strings
找不到123456
這個(gè)key霜旧,則按鈕的title會(huì)顯示123456冯吓。
至此為止棚潦,已經(jīng)全部OK令漂。