lanauage identifier changed in iOS 9

来源:互联网 发布:淘宝论文可靠吗 编辑:程序博客网 时间:2024/06/03 15:45

    iOS 9 的标识符已经改变

NSLocale.preferredLanguages() 。

例如一个用户设置语言为英语,地区为印第安,返回为[ "en-IN" ],而不是[ "en" ]。

这些隐式后退并不总是显而易见的语言标识符,它们是由NSBundle里所使用的语言环境数据资源配置机制。尝试手动处理语言标识符,或执行字符串比较,会导致问题。相反,依靠NSBundle api时加载资源或语言标识符匹配一组可用的语言。

   匹配语言标识符和加载本地化资源

资源加载用NSLocalizedString,资源用NSLocalizedString加载,或者直接使用localizedStringForKey或其他NSBundle资源载入的方法,将自动按照适当的回滚逻辑。如果你需要手动加载资源,如自定义或服务器端源码,请注意,你应该仍然依靠NSBundle语言匹配得到一致的结果。例如,如果您有一组可用的语言和你想知道最好的语言使用的设置考虑到用户偏好,您可以使用逻辑如下所示。

Listing 1  Preferred language lookup

let availableLanguages = [ "en", "en-GB", "en-US", "fr", "fr-CH", "de", "de-CH" ]
let bestMatchedLanguage = NSBundle.preferredLocalizationsFromArray(availableLanguages).first
在本例中,如果用户最首选语言是“en-IN”(印度英语),那么最佳匹配的语言就是“en”(英国英语)。这年代的另一个示例,演示了如何NSBundle回退处理非平凡的语言。

Listing 2  Additional lookup example

let availableLanguages = [ "en", "en-GB", "en-US", "zh-Hans", "zh-Hant" ]
let bestMatchedLanguage = NSBundle.preferredLocalizationsFromArray(availableLanguages).first
在这里,如果用户最首选语言是“zh-HK”(传统的中国香港),那么最佳匹配的语言就是“- hant”(繁体中文)。
0 0
原创粉丝点击