【问题标题】:Remove region code from NSLocale.preferredLanguages array从 NSLocale.preferredLanguages 数组中删除区域代码
【发布时间】:2016-10-06 11:39:58
【问题描述】:

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

另外,我想 IOS9 也会发生同样的事情。

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

现在,我们有“en-US”、“en-RU”、“fr-US”等格式

在我的应用程序中,一些控件的坐标与语言环境相关。现在,由于格式不同,它们都是错误的。我正在考虑解决此问题并继续支持旧版本的最佳方法。

所以,我的问题是:

有没有什么方法可以只接收没有地区代码的语言代码?快速而肮脏的解决方案是从此字符串中读取前两个符号。还有更优雅的吗?

附:有人可以向我解释苹果的逻辑吗?我的意思是,为什么他们决定,最好的选择是更改现有的对象格式(破坏向后兼容性)而不是向 NSLocale 添加额外的字段?

【问题讨论】:

    标签: ios objective-c swift macos localization


    【解决方案1】:

    你可以使用substringToIndex如下:

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

    这样,无论出于何种原因,如果语言代码超过 2 个字符,您就不会被抓到。

    【讨论】:

    • 嗯,是的,这就是我解决这个问题的确切方法。我想,框架中可能有一些新领域,但看起来没有。
    • 当有两个破折号如“zh-Hans-HK”时,这可能是个问题。
    • 对于诸如此类的场景,我推荐使用下面Anbu的回答。然后您可以使用array.first 获取第一部分。
    【解决方案2】:

    使用

    swift3

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

    低于 swift3

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2012-05-01
      • 2021-09-29
      • 2013-10-11
      • 2012-07-13
      相关资源
      最近更新 更多