前言
最近做了一個 意大利的 物流項目,要求支持中、英粱玲、意三種語言躬柬,在APP內(nèi)可以自由切換3種語言,在此記錄過程如下抽减。
一允青、APP內(nèi) 固定文本的多語言
1. 添加語言項
2. 創(chuàng)建strings file文件 勾選上面添加的所需要多個語言項
3. 在創(chuàng)建好的各個語言的文件里面翻譯對應(yīng)的文本
4. 添加 全局 的 切換APP 語言 宏
5. AppDelegate 內(nèi) 程序啟動的 時候 判斷設(shè)置語言
6. APP內(nèi) 切換語言的時候 修改本地字符串
7.所有控件或者頁面 設(shè)置文本的時候 都用 宏去設(shè)置
二、APP 的名稱卵沉、權(quán)限描述颠锉、等基本信息的多語言
1. 創(chuàng)建strings file文件 命名為 InfoPlist.strings文件
2. 勾選所需要多個語言項,在創(chuàng)建好的各個語言的文件里面翻譯對應(yīng)的文本
一、APP內(nèi) 固定文本的多語言
1.添加語言項
2.創(chuàng)建strings file文件
3.勾選所添加語言項,創(chuàng)建語言文件琼掠,在不同的語言文件自己翻譯對應(yīng)文本
4.在PrefixHeader.pch 預(yù)編譯文件內(nèi) 添加 全局 的 切換APP 語言 宏
//************************** 切換APP 語言 宏 ***********************
#define KLanguage(key) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"Localizable"]
5.AppDelegate 內(nèi) 程序啟動的 時候 判斷設(shè)置語言,如果 APP內(nèi)沒有 設(shè)置語言的時候 判斷手機(jī)系統(tǒng)是什么語言
if (![[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"]) {
//獲得當(dāng)前語言
NSArray *languages = [NSLocale preferredLanguages];
NSString *language = [languages objectAtIndex:0];
if([language hasPrefix:@"en"]){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage];
}else if([language hasPrefix:@"it"]){
[[NSUserDefaults standardUserDefaults] setObject:@"it" forKey:appLanguage];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage];
}
[[NSUserDefaults standardUserDefaults]synchronize];
}
6.APP內(nèi) 切換語言的時候 修改本地字符串
_changeView.selectSelectLanauageCallBack = ^(NSString * _Nonnull str) {
if ([str isEqualToString:@"Italiano"]) {
[[NSUserDefaults standardUserDefaults] setObject:@"it" forKey:@"appLanguage"];
}else if ([str isEqualToString:@"中文"]){
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else if ([str isEqualToString:@"English"]){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}
[weakSelf refreshLanguage];
};
7.所有控件或者頁面 設(shè)置文本的時候 都用 宏去設(shè)置,例如:
_nameLab.text = KLanguage(@"注冊");
[_changeBtn setTitle:KLanguage(@"語言") forState:UIControlStateNormal];
_nameTF.placeholder = KLanguage(@"請輸入您的用戶名");
二停撞、APP 的名稱瓷蛙、權(quán)限描述、等基本信息的多語言
1.創(chuàng)建strings file文件 命名為 InfoPlist.strings文件
2. 勾選所需要多個語言項,在創(chuàng)建好的各個語言的文件里面翻譯對應(yīng)的文本,字段的key 是系統(tǒng)固定的字符串怜森,具體字段名可以在info.plist文件里面能找到
Tips:
1.如果 不是APP內(nèi)自由切換速挑,只是根據(jù)系統(tǒng)設(shè)置來切換谤牡,可以不用通過保存本地字符串的方法來判斷切換語言副硅,可以直接用
NSLocalizedString(@"", nil)
方法設(shè)置文本。
- 創(chuàng)建strings 文件的時候 如果命名 不是Localizable.strings翅萤,而是其它恐疲,比方說是Logistics.strings, 那么設(shè)置文本的時候 需要用
NSLocalizedStringFromTable(@"key",@"Logistics", nil)
方法。