iOS 國際化的設置大全

國際化(Internationalization ,簡寫為I18N)的作用是防止將本土文化信息寫死仔應用里(所謂本土文化,是指語言、貨幣、日期格式、數(shù)字格式等)。本土化(Localization,簡寫為L10n)的作用是根據(jù)用戶設置的Language and Region Format(語言和區(qū)域格式),為應用提供適當?shù)臄?shù)據(jù)。需要國際化的包括文本信息國際化、xib和storyboard國際化以及資源文件國際化。

首先,在project的Info里添加所需要支持的語言,這里添加的是Chinese(Simplified)和English-Development Language。

然后創(chuàng)建Localizable.strings文件。點擊File - New - File,選擇Strings File,命名為Localizable.strings。

點擊剛剛創(chuàng)建的Localizable.strings,點擊右邊的localize...,彈出的框中選擇localize,再勾選Chinese,此時Localizable.strings下就有三個文件了。接下來就是設置所需要支持的語言了。

應用名稱國際化

與創(chuàng)建Localizable.strings時一樣,創(chuàng)建InfoPlist.strings文件,添加Chinese。

在對應語言的InfoPlist.strings中設置應用的名稱,按照key = “value”(key有沒有雙引號都可以)定義,

CFBundleDisplayName = “國際化”;

CFBundleDisplayName = “Internationalization”;?

Run 一下,切換設置中的語言為英語或中文,可以看到變化



內容國際化

在Localizable.strings中,自行定義key和value。

在Localizable.strings(Base)和Localizable.strings(English)文件中添加

key = “Test";

在Localizable.strings(Chinese(Simplified))文件中添加

key = "測試";

調用的時候利用NSLocalizedString()宏替換字符串常量。使用NSLocalizedString()宏時需要傳入兩個實參:第一個實參是鍵(必需),第二個實參是注釋(可選)。

self.testLabel.text = NSLocalizedString(@"key", nil);

運行時NSLocalizedString()會遍歷程序包中的所有字符串對照表,找出和設備當前的語言設置相匹配的那個,然后在該文件中找出和相應的鍵匹配的字符串翻譯。

Storyboard與xib國際化

Storyboard與xib兩個的國際化操作一樣,這里只講xib。

新建一個xib的文件,隨便往里面拖了一個label,只是為了表示有點東西。選中xib文件,點擊右邊的Show the File inspector中的Localize...,全部勾選。

此時發(fā)現(xiàn)在SecondViewController.strings中顯示的都是下面這些格式,

/* Class = "UILabel"; text = "Hello"; ObjectID = "DNM-aR-9rZ"; */

"DNM-aR-9rZ.text" = "Hello";

我們需要修改SecondViewController.strings(Chinese(Simplified)中"DNM-aR-9rZ.text"的value

"DNM-aR-9rZ.text" = "你好";

那么以后在xib文件的中添加UI控件時,這里的文件不會自動更新怎么辦呢?

這時我們就要自己找到新添加控件的 Object Id, 就是上面 DNM-aR-9rZ這樣的東西,在xib選中相應的控件,然后右邊屬性欄Show the identity inspector里面找 Object Id,然后手動添加上述類似的代碼;

如果不想通過代碼改的話,點擊最右邊的按鈕,選擇Interface Builder Cocoa Touch XIB,

此時選擇的SecondViewController.strings就變成了SecondViewController.xib,直接在xib中改方便多了。

不過,最好是把xib中的頁面全部布局好了,再去弄國際化,后續(xù)添加控件得自己去更新多個xib文件。

資源文件國際化

資源文件包括圖片文件、? 文件以及前面提到的Localizable.strings等文件,圖片文件和聲音文件等資源文件有時也是需要國際化的。

圖片國際化

需要國際化的圖片不要放在Assets.xcassets中,和著上面的國際化操作一樣做國際化,此處不再多說。

聲音文件國際化

資源文件國際化與圖片資源的國際化不同的,圖片可以通過ImageView控件放到視圖界面上,而聲音等資源文件是通過文件目錄訪問的。我們打開項目所在的文件夾,可以看到后綴是.Iproj的文件夾,這就是國際化的文件夾,

然后我們把所需要國際化的聲音文件放到相對應的國際化文件base.lproj、en.lproj和zh-Hans.lproj中,在程序中訪問它們,

- (void)viewDidLoad{

[super viewDidLoad];

......

NSBundle *thisBundle = [NSBundle mainBundle];

NSString *url = [thisBundle pathForResource:@"聲音文件名" ofType:@"后綴名"];

NSLog(@"url : %@",url);

}

NSBundle的pathForResource:ofType:方法可以更具 前 言的設定,可以讀取對應國際化文件 中的資源文 件。我們改變不同的 言設置 出的結果如下:

/....../i18n.app/zh-Hans.lproj/文件名.后綴名

/....../i18n.app/en.lproj/文件名.后綴名

上面介紹的資源文件的訪問方式不止適合于文件, 是要能放置在資源目錄下可以通過 NSBundle的pathForResource:ofType:方法實現(xiàn)國際化。

最后,另外推薦一個國際化腳本工具https://github.com/alexfeng/InternationalizationScript-iOS。在客戶需要再加20多種語言后,看到整個app那么多的字符串我還要一個一個添加國際化,內心是奔潰的??。不過,好在朋友寫的一個腳本,可以把excel直接導入為Localizable.strings 本地化文件,當然,也可以本地化文件導出到Excel,方便多了。具體咋用github上寫的好詳細,就不多說啦。

如果有啥不對的地方,請一定要告訴我哈??

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容