iOS 开发中实现国际化语言切换
2016-08-16 23:58
495 查看
在开发过程中,有时会需要支持国际化,需要根据系统语言去改变应用内的语言,下面就为实现步骤。
1. 配置语言包等配置
1.1 创建一个后缀
1.2 在这个文件的右边面板,有个 Localizations
点击后,去选择要添加进去的语言,一开始默认是有英语的
1.3 添加其他需要支持的语言
在 PROJECT 中的 Localizations 中添加新的语言;
选取对应的语言,并记录下来括号内的字母,因为后面还会要用到(比如法国 French(fr) ,你就要记住 fr );
然后,他会弹出一个框,要把 storyboard 的对勾去掉
2. 然后就开始去写代码了。
2.1 只要是自己手动去写好的文字,不管是 Label 还是 Button 还是其他的,都要去写成全局的变量。
2.2 写一个方法,去获取到本机的语言信息,
得到的这个 language 就是当前本机设置的语言信息;
2.3 为了获取到当前的语言文件,根据创建的
然后,针对不同系统语言来进行不同的判断,根据刚才取到的 language 来进行判断
到这里,语言切换就完成了,切记
这个是我的Demo。
另外,需要注意的是,在iOS8之前,获取到的本机语言这里,后面是没有-CN -US之类的东西,这个是在iOS9添加上的。而且,模拟器中取到的语言末尾是-US的,推测,后缀是和购买设备的地区有关。
1. 配置语言包等配置
1.1 创建一个后缀
.strings的文件,作为你的多语言包
1.2 在这个文件的右边面板,有个 Localizations
点击后,去选择要添加进去的语言,一开始默认是有英语的
1.3 添加其他需要支持的语言
在 PROJECT 中的 Localizations 中添加新的语言;
选取对应的语言,并记录下来括号内的字母,因为后面还会要用到(比如法国 French(fr) ,你就要记住 fr );
然后,他会弹出一个框,要把 storyboard 的对勾去掉
2. 然后就开始去写代码了。
2.1 只要是自己手动去写好的文字,不管是 Label 还是 Button 还是其他的,都要去写成全局的变量。
2.2 写一个方法,去获取到本机的语言信息,
// 获取本机语言信息 第一个元素为用户当前设置的语言 NSArray *languageArray = [NSLocale preferredLanguages]; NSString *language = [languageArray objectAtIndex:0]; NSLog(@"%@", language);
得到的这个 language 就是当前本机设置的语言信息;
2.3 为了获取到当前的语言文件,根据创建的
.strings文件里的 key 进行文字转换,可以写成宏定义
// 其中 table 为 .strings 的文件名 #define LocalizedString(key) [NSString stringWithFormat:@"%@", [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"Language"]]
然后,针对不同系统语言来进行不同的判断,根据刚才取到的 language 来进行判断
self.str = language; //中文(简体) if ([self.str isEqualToString:@"zh-Hans-CN"]) { // 一开始记录的语言括号里的东西,就需要放到 object 这里 [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage]; // 对 label 进行赋值 label.text = LocalizedString(@"labelTxt"); } //英语 if ([self.str isEqualToString:@"en-CN"]) { [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:appLanguage]; label.text = LocalizedString(@"labelTxt"); } //法语 if ([self.str isEqualToString:@"fr-CN"]) { [[NSUserDefaults standardUserDefaults] setObject:@"fr" forKey:appLanguage]; label.text = LocalizedString(@"labelTxt"); }
到这里,语言切换就完成了,切记
.strings中的 key 都是相同的,不然是不会成功的。
这个是我的Demo。
另外,需要注意的是,在iOS8之前,获取到的本机语言这里,后面是没有-CN -US之类的东西,这个是在iOS9添加上的。而且,模拟器中取到的语言末尾是-US的,推测,后缀是和购买设备的地区有关。
相关文章推荐
- [iOS]如何在iOS开发中切换显示语言实现国际化
- iOS开发Xcode中切换显示语言实现国际化
- [iOS]怎样在iOS开发中切换显示语言实现国际化
- [iOS]怎么在iOS开发中切换显示语言实现国际化
- [iOS]如何在iOS开发中切换显示语言实现国际化
- ios iphone ipad 开发应用内实现多语言自由切换 超级好用
- iOS开发:国际化之app支持多种语言切换
- iOS开发 - app国际化+手动切换语言
- iOS开发-进阶:语言国际化及代码切换语言
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
- ios开发应用内实现多语言自由切换 三
- IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)
- ios开发应用内实现多语言自由切换
- ios开发应用内实现多语言自由切换 (转)
- iOS开发--应用国际化,应用内切换语言
- iOS开发:国际化之app支持多种语言切换
- [Cocoa]_[初级]_[Cocoa开发应用实现多语言之间自由切换]
- iOS开发之实现图片自动切换(类似android画廊效果)
- ios 实现app语言切换,不跟随系统