从NSLocale.preferredLanguages数组中删除区域代码

时间:2016-10-06 11:39:58

标签: ios objective-c swift macos localization

将我的Mac更新到OSX Sierra之后,我注意到,NSLocale.preferredLanguages()数组现在采用不同的格式(请参阅快速解释here

此外,对于IOS9,我想也是如此。

所以,简而言之,以前我们有语言格式“en”,“fr”,“ru”,e.t.c

现在,我们的格式为“en-US”,“en-RU”,“fr-US”e.t.c。

在我的应用程序中,某些控件的坐标与区域设置相关。现在,由于格式不同,它们都错了。我正在考虑解决这个问题的最佳方法,并继续支持旧版本。

所以,我的问题是:

有没有办法只接收没有区域代码的语言代码?快速而肮脏的解决方案是从该字符串中读取前两个符号。有更优雅的吗?

P.S。有人可以向我解释Apple的逻辑。我的意思是,为什么他们已经决定,最好的选择是改变现有的对象格式(打破向后兼容性)而不是向NSLocale添加额外的字段?

2 个答案:

答案 0 :(得分:1)

您可以按如下方式使用substringToIndex

let str = "en-US"

if let indexOfDash = str.characters.indexOf("-") {
    let langCode = str.substringToIndex(indexOfDash)
}

这种方式如果语言代码因任何原因而长于2个字符,你就不会被抓住。

答案 1 :(得分:1)

使用

<强> swift3

let splitArray = "en-US".components(separatedBy: "-") you get // ["en", "US"]

低于swift3

let splitArray = "en-US".componentsSeparatedByString("-") // ["en", "US"]