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

iOS 开发中实现国际化语言切换

2016-08-16 23:58 495 查看
在开发过程中,有时会需要支持国际化,需要根据系统语言去改变应用内的语言,下面就为实现步骤。

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 国际化 语言