为什么 NSLocale.current.identifier 在 macOS 上包含货币?
Why does NSLocale.current.identifier include currency on macOS?
如果我在 iOS 上请求当前区域设置标识符,它 returns 只是标识符字符串:
let identifier = NSLocale.current.identifier // en_GB
然而,在 macOS 10.12.2 上它也 returns 货币:
let identifier = NSLocale.current.identifier // en_GB@currency=GBP
这是错误还是预期行为?
我认为对我来说最好的选择是自己生成代码。为了解决这个问题,我在 Locale
:
上创建了一个扩展
extension Locale {
var iso3166code: String {
guard
let language = languageCode,
let region = regionCode
else { return "en-US" }
return "\(language)-\(region)"
}
}
虽然这对我的目的来说足够准确,但您可能应该确保它 returns 是您项目的预期值。
我最近 运行 喜欢这个。我不确定为什么,但显然从 10.12 开始,localeIdentifier
can include a bunch of stuff besides country and language.
遗憾的是,文档没有详细说明包含其他元数据的情况。
但是,从 10.12 开始,还有另一个 属性 languageCode
, which, in conjunction with countryCode
,您可以使用它来生成 en_US
。
这就是iTerm2 does。
如果我在 iOS 上请求当前区域设置标识符,它 returns 只是标识符字符串:
let identifier = NSLocale.current.identifier // en_GB
然而,在 macOS 10.12.2 上它也 returns 货币:
let identifier = NSLocale.current.identifier // en_GB@currency=GBP
这是错误还是预期行为?
我认为对我来说最好的选择是自己生成代码。为了解决这个问题,我在 Locale
:
extension Locale {
var iso3166code: String {
guard
let language = languageCode,
let region = regionCode
else { return "en-US" }
return "\(language)-\(region)"
}
}
虽然这对我的目的来说足够准确,但您可能应该确保它 returns 是您项目的预期值。
我最近 运行 喜欢这个。我不确定为什么,但显然从 10.12 开始,localeIdentifier
can include a bunch of stuff besides country and language.
遗憾的是,文档没有详细说明包含其他元数据的情况。
但是,从 10.12 开始,还有另一个 属性 languageCode
, which, in conjunction with countryCode
,您可以使用它来生成 en_US
。
这就是iTerm2 does。