您的位置:首页 > 移动开发

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”;

其他的同理

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  国际化 app 语言 iOS