我有一组国家/地区代码,例如:["US","CZ","FR"]
等,我想通过此数组迭代获取本地化的国家/地区名称。
以前 localizedString(forRegionCode:)
工作得很好。但可能自 10.3 以来,情况发生了变化。
这是一个例子:
let currentLocale = Locale.current
// en_US (current)
let currentIdentifier = Locale.current.identifier
// "en_US"
let localeFromCurrentIdentifier = Locale(identifier: currentIdentifier)
// "en_US" (fixed)
let franceCode = "fr"
let franceName = currentLocale.localizedString(forRegionCode: franceCode)
// nil
let franceName2 = localeFromCurrentIdentifier.localizedString(forRegionCode: franceCode)
// "France"
那么,为什么当前语言环境对法国代码返回 nil
而从当前语言环境标识符初始化的语言环境返回 France
?
更新:所以使 localizedString(forRegionCode:)
工作的解决方法不是使用 Locale.current
,而是使用 Locale (标识符:Locale.current.identifier)
。
最佳答案
您需要维护一个表,将每个国家/地区代码映射到默认语言代码,例如 this table在维基百科上。为每个国家/地区选择一种默认语言,因为它可能有多种官方语言,甚至是同一种语言的变体(简体中文与繁体中文)。
let countryCodes = ["US","CZ","FR"]
// Ideally, this should come from a plist
let defaultLanguageCodes = [
"US": "en",
"CZ": "cs",
"FR": "fr"
]
let countryNames : [String] = countryCodes.map {
let languageCode = defaultLanguageCodes[$0]!
let localeIdentifier = "\(languageCode)_\($0.lowercased())"
let locale = Locale(identifier: localeIdentifier)
return locale.localizedString(forRegionCode: $0)!
}
print(countryNames) // United States, Česká republika, France
关于swift - 从地区代码接收国家名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43373009/