準(zhǔn)備工作:設(shè)置支持的語言
App名稱
新建InfoPlist.strings文件痒留。
-
點(diǎn)擊 File inspector 中的 localize 按鈕。
隨便選擇一種語言(因?yàn)楹竺孢€可以選)拳芙,點(diǎn)擊Localize添怔。
-
選擇支持的語言。
- 在每種語言對應(yīng)strings文件中加入
CFBundleDisplayName = "Localizable App Name";
宵膨,將Localizable App Name
改成對應(yīng)語言的名稱即可巢墅。
代碼中字符串
新建
Localizable.strings
文件诸狭。2、3步操作同上君纫。
將需要國際化的字符串寫在文件中驯遇,格式為
"key" = "value";
-
將代碼中使用的字符串替換為
NSLocalizedString(key, comment)
第一個(gè)參數(shù)為上面的key
第二個(gè)參數(shù)主要為了方便翻譯人員,一般不使用蓄髓,可傳nil
-
如果是多人開發(fā)叉庐,所有翻譯都寫在
Localizable.strings
文件中的話,會(huì)不方便維護(hù)会喝。可以考慮為每一個(gè)模塊定義一個(gè)strings文件陡叠,此時(shí)需要使用另一個(gè)方法
NSLocalizedStringFromTable(key, table, comment)
玩郊,其中的 table 參數(shù)為對應(yīng)的strings文件的文件名。
圖片
方式一:字符串方式
使用上面字符串本地化的方法枉阵,為每種語言的圖片译红,定義不同的文件名,把文件名作為 value 放在 strings 文件中兴溜,通過以下方式設(shè)置圖片
UIImage(named: NSLocalizedString("pic_key",comment: ""))
缺點(diǎn):每張圖片需要拖引用
方式二:原生方式
在項(xiàng)目中選中圖片侦厚,點(diǎn)擊 File inspector 中的 localize 按鈕,選擇語言后拙徽,會(huì)生成對應(yīng)語言的lproj文件夾刨沦,替換文件夾中的圖片,注意圖片名稱必須一樣膘怕。不用改變項(xiàng)目中的代碼想诅。
UIImage(named: "pic_name")
缺點(diǎn):無法實(shí)現(xiàn)應(yīng)用內(nèi)切換語言。
stroyboard/xib
方式一:每種語言一個(gè)storyboard
不推薦此方法岛心,使用此方法来破,界面上的每一處修改都需要修改每種語言的storyboard,難以維護(hù)鹉梨。
方式二:Base storyboard讳癌,多個(gè)strings文件
選擇上圖中的Localizable Strings選項(xiàng)穿稳。
使用此方法存皂,Xcode會(huì)自動(dòng)生成 storyboard 每個(gè)控件的Text對應(yīng)的文件。
但是每次修改storyboard逢艘,不會(huì)自動(dòng)生成新的strings文件旦袋。雖然可以使用命令 ibtool Main.storyboard --generate-strings-file ./NewTemp.string
手動(dòng)生成,但是會(huì)覆蓋掉以前的內(nèi)容它改,也不方便維護(hù)疤孕。
解決方案是使用腳本。戳我
將腳本文件拖到工程中央拖,添加腳本祭阀,每次編譯都會(huì)通過算法來比較差異,只重新生成新增控件的 strings鲜戒。
方式三:IBInspectable了解一下
新建Label分類
#import <UIKit/UIKit.h>
?
@interface UILabel (localizable)
?
@property (nonatomic, retain) IBInspectable NSString *localizedTable;
?
@end
@implementation UILabel (localizable)
?
@dynamic localizedTable;
- (void)setLocalizedTable:(NSString *)localizedTable {
NSString *title = self.text;
NSString *localizedStr = NSLocalizedString(title, table, nil);
self.text = localizedStr;
}
?
@end
此時(shí)storyboard中的Label會(huì)多出一個(gè)localizedTable屬性专控,修改為對應(yīng)的表名即可。
服務(wù)器返回
可與服務(wù)端同學(xué)溝通遏餐,增加一個(gè)請求參數(shù)為語言伦腐,返回對應(yīng)語言的結(jié)果。