设置"语言&区域" (Settings => General => Language& Region)如下:
但是,(正如上面提到的答案:How to get detailed language of device in swift呼叫:
print(Locale.current.identifier)
日志:
en_JO
这是无效 local identifier(从逻辑上讲,约旦是一个中东国家,其母语是阿拉伯语而非英语)。
我还检查了availableIdentifiers:
print(Locale.availableIdentifiers)
和 - 显然-it 不包含" en_JO"。
另外,我试过了:
if let regionCode = Locale.current.regionCode, let languageCode = Locale.current.languageCode {
print("\(languageCode)_\(regionCode)")
}
并且输出相同。
它似乎与标识符有效性无关,但我怎样才能确保获得有效的标识符?例如,在我的情况下,预期结果应为:
en_CA
那我在这里错过了什么?
答案 0 :(得分:2)
标识符en_JO
没有任何效果。根据Unicode标准,标识符完全有效,作为约旦地区英语的标识符。
但是,这并不意味着该地区的数据必须可用。系统不需要为每种疯狂的语言和区域组合提供数据。
请参阅Unicode标准中的Language Matching。如果所请求的区域设置没有数据,则使用后备区域设置,在这种情况下可能是区域设置en
。
答案 1 :(得分:1)
每个区域设置标识符包括语言代码(例如en)和区域代码(例如JO)。从Apple的documentation:
可以看出这一点区域设置ID标识特定区域及其文化 约定 - 例如日期,时间和数字的格式。至 指定区域设置,使用下划线字符组合语言ID 与区域指示符
这意味着您的en_JO是无效标识符的声明不正确。之所以成立是因为你选择了英语作为乔丹的语言和地区。
现在,如果你只想获得langauge部分,你可以通过preferredLangauges获得它,
let langId = Locale.preferredLanguages.first
或collatorIdentifier关于当前Locale
let langId = Locale.current.collatorIdentifier // returns optional string