友好名称的语言代码
Language codes to friendly names
我有一个语言代码,例如“en_US”,我正试图从中获取一个友好的名称,例如“English”。
这是我现在正在做的事情:
Locale.current.localizedString(forLanguageCode: code)
它可以,但是对于中文等语言,它并不完全符合我的要求。
zh-Hans
应该return“简体中文”,zh-Hant
应该return“繁体中文”。
然而,他们都只是return“中国人”。您如何让它们达到 return 正确的值?
您可以改用 NSLocale 的 displayName(forKey:value:)
。
let code = "en_US"
if let identifier = (Locale.current as NSLocale).displayName(forKey: .identifier, value: code) {
print(identifier) /// English (United States)
}
let code = "zh_Hans"
if let identifier = (Locale.current as NSLocale).displayName(forKey: .identifier, value: code) {
print(identifier) /// Chinese, Simplified
}
"en_US"
不是语言代码,它是由语言代码 "en"
和区域代码 "US"
组成的区域设置标识符。因此,调用 localizedString(forLanguageCode:)
将无法正常工作。使用标识符(就像你有的那样),使用 localizedString(forIdentifier:)
:
let identifier = "en_US"
let humanReadableName =
Locale.current.localizedString(forIdentifier: identifier) ?? identifier
这也适用于 zh-Hans
这样的标识符,它将 return “简体中文”。
请注意,我建议在末尾附加 ?? identifier
,因为 localizedString(forIdentifier:)
return 是可选的,以防标识符无效,您可以在其中回退到标识符本身所以你不必处理可选字符串。
我有一个语言代码,例如“en_US”,我正试图从中获取一个友好的名称,例如“English”。
这是我现在正在做的事情:
Locale.current.localizedString(forLanguageCode: code)
它可以,但是对于中文等语言,它并不完全符合我的要求。
zh-Hans
应该return“简体中文”,zh-Hant
应该return“繁体中文”。
然而,他们都只是return“中国人”。您如何让它们达到 return 正确的值?
您可以改用 NSLocale 的 displayName(forKey:value:)
。
let code = "en_US"
if let identifier = (Locale.current as NSLocale).displayName(forKey: .identifier, value: code) {
print(identifier) /// English (United States)
}
let code = "zh_Hans"
if let identifier = (Locale.current as NSLocale).displayName(forKey: .identifier, value: code) {
print(identifier) /// Chinese, Simplified
}
"en_US"
不是语言代码,它是由语言代码 "en"
和区域代码 "US"
组成的区域设置标识符。因此,调用 localizedString(forLanguageCode:)
将无法正常工作。使用标识符(就像你有的那样),使用 localizedString(forIdentifier:)
:
let identifier = "en_US"
let humanReadableName =
Locale.current.localizedString(forIdentifier: identifier) ?? identifier
这也适用于 zh-Hans
这样的标识符,它将 return “简体中文”。
请注意,我建议在末尾附加 ?? identifier
,因为 localizedString(forIdentifier:)
return 是可选的,以防标识符无效,您可以在其中回退到标识符本身所以你不必处理可选字符串。