为什么NSLocale.current.identifier在macOS上包含货币?

时间:2017-01-07 12:23:20

标签: swift macos appkit

如果我在iOS上请求当前的语言环境标识符,它只返回标识符字符串:

let identifier = NSLocale.current.identifier // en_GB

但是,在macOS 10.12.2上,它还会返回货币:

let identifier = NSLocale.current.identifier // en_GB@currency=GBP

这是错误还是预期的行为?

2 个答案:

答案 0 :(得分:0)

我认为这里最好的选择是自己生成代码。为了解决这个问题,我在Locale创建了一个扩展程序:

extension Locale {
    var iso3166code: String {
        guard
            let language = languageCode,
            let region = regionCode
            else { return "en-US" }
        return "\(language)-\(region)"
    }
}

虽然这对我的目的来说足够准确,但您应该确保它返回项目的预期值。

答案 1 :(得分:0)

我最近碰到了这个。我不确定原因,但显然是从10.12开始,localeIdentifier can include a bunch of stuff besides country and language

不幸的是,文档没有详细说明包含其他元数据的情况。

但是,从10.12开始,还有另一个属性languageCode,与countryCode一起,您可以用来生成en_US

这就是iTerm2 does