如果我在iOS上请求当前的语言环境标识符,它只返回标识符字符串:
let identifier = NSLocale.current.identifier // en_GB
但是,在macOS 10.12.2上,它还会返回货币:
let identifier = NSLocale.current.identifier // en_GB@currency=GBP
这是错误还是预期的行为?
答案 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。