iOS9正确获取用户语言设置

Yourtion 创作于:2015-09-30     全文约 1509 字, 预计阅读时间为 5 分钟

升级 iOS9 后,发现很多应用都变成了英文的,这是因为 iOS9 对语言的标识进行升级,导致一些程序原有的语言判断出错,针对这个情况,在兼容原有系统的基础上对语言的判断进行升级,让功能更加完善,分享之~

获取语言方法

NSString *currentLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
NSLog(@"currentlanguage = %@",currentLanguage);

原有判断逻辑为

之前的中文使用 zh-Hans 直接判断相等即可:

if ([currentLanguage isEqualToString:@"zh-Hans"]) {
	NSLog(@"zh-Hans");
}

兼容判断逻辑

iOS升级后 zh-Hans 变成了 zh-Hans-CN ,估计是按照 “RFC 4646” 进行进一步规范,为了兼容原有的系统,对判断逻辑进行如下升级:

if ([currentLanguage containsString:@"zh-Hans"]) {
	NSLog(@"zh-Hans");
}

同理,繁体中文的变成:

if ([currentLanguage containsString:@"zh-Hant"]) {
	NSLog(@"zh-Hant");
}

后记

一开始以为 zh-Hans-CN 是个奇怪的写法,不明白为什么苹果要做这样的改动,后来发现原来在 “通用” -> “语言与地区” 里面修改 “区域格式” 中的 “地区” ,例如从 “中国” 修改为 “美国” ,那么相应的数值就会从 zh-Hans-CN 变成 zh-Hans-US

所以要让程序仅仅根据语言判断,需要严格按照上面的方法使用 containsString 来,否则就可能出现用户切换区域后语言显示不正确的情况。

关于兼容性

因为 containsString 在 iOS8 以上才有,如果需要兼容 iOS7 参考以下代码:

if ([currentLanguage rangeOfString:@"zh-Hans"].location != NSNotFound) {
  NSLog(@"zh-Hans");
}

中文相关标签

参考: http://www.ruanyifeng.com/blog/2008/02/codes_for_language_names.html

tag Lang
zh-Hans 简体中文
zh-Hans-CN 大陆地区使用的简体中文
zh-Hans-HK 香港地区使用的简体中文
zh-Hans-MO 澳门使用的简体中文
zh-Hans-SG 新加坡使用的简体中文
zh-Hans-TW 台湾使用的简体中文
zh-Hant 繁体中文
zh-Hant-CN 大陆地区使用的繁体中文
zh-Hant-HK 香港地区使用的繁体中文
zh-Hant-MO 澳门使用的繁体中文
zh-Hant-SG 新加坡使用的繁体中文
zh-Hant-TW 台湾使用的繁体中文

原文链接:https://blog.yourtion.com/get-current-language-on-ios9.html