iOS-生成国际化包-配置App多语言支持
2016-03-21 10:54
751 查看
如果你的App需要支持多国语言。那么,就应该为你的App应用添加“国际化”支持。
国际化其实都大同小异,其核心思想就是为每种语言单独定义一份资源。
1.创建国际化语言文件:文件名为:Localizable.strings
2.选中Localizable.strings文件,在Utilites中,点击Localizable选项
3.创建English语言包。
创建后,你的Localizable.strings文件下将挂在英文的语言支持文件。
4.根据需要添加其他多国语言支持。
直接点击Finish。
添加语言支持。
我们以我的文件为例:
在Localizable.strings(Chinese(Simplified))中,加入如下代码:
“hello” = “你好”;
在Localizable.strings(English)中,加入如下代码:
“hello” = “Hello”;
其他的同理
至此,国际化就配置好了,当在“设置”中切换系统语言的时候,app的语言可以自动切换了
在安装后第一次打开APP时,会自动初始化该key为当前系统的语言编码,如简体中文就是zh-Hans。
那么我们要实现语言切换改变AppleLanguages的值即可,但是这里有一个坑,因为苹果没提供给我们直接修改APP默认语言的API,我们只能通过NSUserDefaults手动去操作,且AppleLanguages的值改变后APP得重新启动后才会生效(才会读取相应语言的lproj中的资源,意义着就算你改了,资源还是加载的APP启动时lproj中的资源),猜测应该是框架层在第一次加载时对AppleLanguages的值进行了内存缓冲
为了方便,定义宏
查找对应的strings文件
按钮切换
国际化其实都大同小异,其核心思想就是为每种语言单独定义一份资源。
1.创建国际化语言文件:文件名为:Localizable.strings
2.选中Localizable.strings文件,在Utilites中,点击Localizable选项
3.创建English语言包。
创建后,你的Localizable.strings文件下将挂在英文的语言支持文件。
4.根据需要添加其他多国语言支持。
直接点击Finish。
添加语言支持。
我们以我的文件为例:
在Localizable.strings(Chinese(Simplified))中,加入如下代码:
“hello” = “你好”;
在Localizable.strings(English)中,加入如下代码:
“hello” = “Hello”;
其他的同理
label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 50)]; label.textColor = [UIColor orangeColor]; [label setText:NSLocalizedString(@"hello",@"")]; [self.view addSubview:label];
至此,国际化就配置好了,当在“设置”中切换系统语言的时候,app的语言可以自动切换了
应用内切换语言
应用启动时,首先会读取NSUserDefaults中的key为AppleLanguages的内容,该key返回一个String数组,存储着APP支持的语言列表,数组的第一项为APP当前默认的语言。在安装后第一次打开APP时,会自动初始化该key为当前系统的语言编码,如简体中文就是zh-Hans。
那么我们要实现语言切换改变AppleLanguages的值即可,但是这里有一个坑,因为苹果没提供给我们直接修改APP默认语言的API,我们只能通过NSUserDefaults手动去操作,且AppleLanguages的值改变后APP得重新启动后才会生效(才会读取相应语言的lproj中的资源,意义着就算你改了,资源还是加载的APP启动时lproj中的资源),猜测应该是框架层在第一次加载时对AppleLanguages的值进行了内存缓冲
为了方便,定义宏
#define AppLanguage @"appLanguage"
查找对应的strings文件
#define CustomLocalizedString(key, comment) \ [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:@"" table:nil]
按钮切换
- (void)viewDidLoad { [super viewDidLoad]; label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 50)]; label.textColor = [UIColor orangeColor]; [label setText:NSLocalizedString(@"hello",@"")]; [self.view addSubview:label]; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(100, 400, 100, 50); [button setTitle:NSLocalizedString(@"change",@"") forState:UIControlStateNormal]; [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; } - (void)buttonClick { NSString *currentLanguage = [[NSUserDefaults standardUserDefaults]objectForKey:AppLanguage]; if ([currentLanguage isEqualToString: @"en"]) { [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:AppLanguage]; }else { [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:AppLanguage]; } [[NSUserDefaults standardUserDefaults] synchronize]; label.text= CustomLocalizedString(@"hello", nil); NSLog(@"当前使用的语言:%@",currentLanguage); }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- 你应该学习哪种编程语言?
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- [转]我们需要一种其他人能使用的编程语言
- 浅谈Ruby on Rails的国际化
- C#语言主要特性总结
- APP添加CNZZ统计插件教程 Android版添加phonegap
- C语言中static的作用及C语言中使用静态函数有何好处
- PHP检测用户语言的方法
- JavaScript面对国际化编程时的一些建议
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app