前言
最近做了一个 意大利的 物流项目,要求支持中、英、意三种语言,在APP内可以自由切换3种语言,在此记录过程如下。
一、APP内 固定文本的多语言
1. 添加语言项
2. 创建strings file文件 勾选上面添加的所需要多个语言项
3. 在创建好的各个语言的文件里面翻译对应的文本
4. 添加 全局 的 切换APP 语言 宏
5. AppDelegate 内 程序启动的 时候 判断设置语言
6. APP内 切换语言的时候 修改本地字符串
7.所有控件或者页面 设置文本的时候 都用 宏去设置
二、APP 的名称、权限描述、等基本信息的多语言
1. 创建strings file文件 命名为 InfoPlist.strings文件
2. 勾选所需要多个语言项,在创建好的各个语言的文件里面翻译对应的文本
一、APP内 固定文本的多语言
1.添加语言项


2.创建strings file文件


3.勾选所添加语言项,创建语言文件,在不同的语言文件自己翻译对应文本

4.在PrefixHeader.pch 预编译文件内 添加 全局 的 切换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 内 程序启动的 时候 判断设置语言,如果 APP内没有 设置语言的时候 判断手机系统是什么语言
if (![[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"]) {
//获得当前语言
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内 切换语言的时候 修改本地字符串
_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.所有控件或者页面 设置文本的时候 都用 宏去设置,例如:
_nameLab.text = KLanguage(@"注册");
[_changeBtn setTitle:KLanguage(@"语言") forState:UIControlStateNormal];
_nameTF.placeholder = KLanguage(@"请输入您的用户名");
二、APP 的名称、权限描述、等基本信息的多语言
1.创建strings file文件 命名为 InfoPlist.strings文件
2. 勾选所需要多个语言项,在创建好的各个语言的文件里面翻译对应的文本,字段的key 是系统固定的字符串,具体字段名可以在info.plist文件里面能找到

Tips:
1.如果 不是APP内自由切换,只是根据系统设置来切换,可以不用通过保存本地字符串的方法来判断切换语言,可以直接用
NSLocalizedString(@"", nil)
方法设置文本。
- 创建strings 文件的时候 如果命名 不是Localizable.strings,而是其它,比方说是Logistics.strings, 那么设置文本的时候 需要用
NSLocalizedStringFromTable(@"key",@"Logistics", nil)
方法。
网友评论