升级ios9之后,使得原本支持中英文的app出现闪退,中英文混乱的问题!大家不要慌,原因是升级之后中英文目录名字改了。在真机上,中文资源目录名由zh-Hans---->zh-Hans-CN,英文资源目录名由en---->en-CN,ios9模拟器上面的中英文资源目录名和真机上面的不一样,分别是zh-Hans-US,en-US。所以喜欢在模拟器上面调试的小伙伴要注意了!
ios9之前版本中,模拟器中英文的资源目录为:
中文的资源目录为:
目录的位置如下:
在app内部切换语言的实现方式:
#define AppLanguage @"userLanguage"
#define CustomLocalizedString(key, comment) \
[[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[[NSUserDefaults standardUserDefaults] valueForKey:AppLanguage] ofType:@"lproj"]] \
localizedStringForKey:(key) value:@"" table:nil]
使用方法:
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:AppLanguage];
CustomLocalizedString(@"username", nil)
这样就获取了中文资源!
修改ios9中英文资源找不到、错乱的问题,方法如下:
#define OSVersionIsAtLeastiOS9() ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9 ? YES :NO)
NSArray *languages = [NSLocale preferredLanguages];
NSString *currentLanguage = [languages objectAtIndex:0];
if (![[NSUserDefaults standardUserDefaults] objectForKey:AppLanguage]) {
if (OSVersionIsAtLeastiOS9()) {
if ([currentLanguage isEqualToString:@"zh-Hans-US"] || [currentLanguage isEqualToString:@"zh-Hans-CN"]) {
//简体中文
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:AppLanguage];
}
else if ([currentLanguage isEqualToString:@"en-US"] || [currentLanguage isEqualToString:@"en-CN"]) {
//英文
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:AppLanguage];
}
}
else {
[[NSUserDefaults standardUserDefaults] setObject:currentLanguage forKey:AppLanguage];
}
}