之前做的項目都不需要去做國際化,最近公司項目需要國際化了。于是自己在網上找了一些資料,自己親手實踐做了一遍,然后碼了這遍文章。文中有錯誤的地方,還望大家指出。謝謝!
1. App名稱國際化
點擊工程-PROJECT-Info-Localizations,添加簡體中文支持,如果想支持繁體,也可繼續添加,其他語言亦然。
新建一個Strings File,命名必須為InfoPlist.strings,不然不起作用。
選中創建的InfoPlist.strings - 點擊右邊的“Localizion”- 添加簡體中文
(PS: Base不要選中, 我也不知道Base選中會有什么影響)
分別在InfoPlist.strings中文和英文文件中創建:
“CFBundleDisplayName” = “中文名字”;
“CFBundleDisplayName” = “EnglishName”;
名字字符串自己填寫就好, 這里只是示范
中文app名稱:
分別切換模擬器的設置中的語言至中英文模式,分別查看appiocn下面的名字的變化。搞定!(如果你的沒有成功,肯定是你哪一步錯了,自己去檢查啰。????)
2. 文本國際化(針對代碼中字符串進行國際化)
主要針對代碼中的字符串進行國際化,比如說一些消息,UI標題等。
我們通過一個Localizable.strings文件來存儲每個語言的文本,它是iOS默認加載的文件,如果想用自定義名稱命名,在使用NSLocalizedString方法時指定tableName為自定義名稱就好了,但你的應用規模不是很大就不要分模塊搞特殊了。
同添加InfoPlist.strings的做法相同,添加一個Localizable.strings文件
對應中英文(其他語言自行添加),分別添加下列語句:
Localizable英文文件:
關于上述的key和value,只是示范,可自行定義,調用這些key-value需要利用NSLocalizedString(<#key#>, <#comment#>)系統宏,例如:NSLocalizedString(@”alertTitle”, @”這是一句注解,根據情況寫”),第一個參數即在strings文件中自定義的key,根據不同的語言環境,系統會自動檢測這個key對應的value(中文還是英文),第二個參數是注釋,為了便于理解,可以為nil。
分別切換模擬器的設置中的語言至中英文模式,分別查看Alert彈窗效果:
英文環境下效果:
3. 圖片的國際化
方案一: 原生支持(建議用這一種)
=============繼續:
打開文件夾以后出現這樣的截圖:
在XIB或Storyboard中引用圖片時如果只使用名稱有時候是實時顯示不了的,一定要加上后綴名.(例如mask.png)
代碼中使用:
UIImageView *imgView = [[UIImageView alloc]init];
imgView.frame = CGRectMake(100, 50, 150, 150);
imgView.image = [UIImage imageNamed:@"mask.png"];
[self.view addSubview:imgView]; //OK, 到這一步圖片國際化已經完成了。
4. Storyboard&XIB國際化
前面的兩種資源國際化比較簡單,但Storyboard國際化就稍微麻煩了點。同樣它也有二種方案
方案一:每種語言定制一套Storyboard(不推薦,所以不寫了啊。這里給你們個鏈接:http://www.cocoachina.com/ios/20151120/14258.html自己去看吧。)
方案二: 基于基礎的Base StoryBoard以及每種語言一套strings
1.下面用StoryBoard講解,Xib同理:
然后
1 在Main.string(Chinese(Simplified)) 中設置:"lKs-YV-8tS.normalTitle" = "我是一個按鈕";
2 在Main.string(English)中設置:"lKs-YV-8tS.normalTitle" = "I am a button";至于為什么這么設置:
前面的lKs-YV-8tS,這個是控件的Object-ID,
可以向下圖查找也可以直接查看它的源代碼(XML格式),后面的就是屬性。
下面看運行結果:
中文:
英文:
=================================================================
以上算是整個國際化的完整過程,本人菜鳥,第一次寫簡書,有不對的地方還請見諒。
QQ: 260595314
github地址: 暫時還沒上傳上去.