语言编码转换为友好的名称。

6

我有一个语言代码,例如"en_US",我想从中获取一个友好的名称,比如"英语"。

这是我当前正在做的事情:

Locale.current.localizedString(forLanguageCode: code)

代码可以运行,但是对于例如中文的语言,它并不能完全满足我的需求。

zh-Hans 应该返回“简体中文”,zh-Hant 应该返回“繁体中文”。

然而它们都只返回“中文”。你该如何才能让它们返回正确的值呢?

2个回答

4
你可以使用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
}

1
我认为使用 LocalelocalizedString(forIdentifier:) 函数是更符合 Swift 风格的方式。 - gcharita

3
""en_US"不是语言代码,它是由语言代码"en"和地区代码"US"组成的区域标识符。因此,调用localizedString(forLanguageCode:)将不能正常工作。使用标识符(如您所拥有的),请使用localizedString(forIdentifier:):"
let identifier = "en_US"
let humanReadableName = 
    Locale.current.localizedString(forIdentifier: identifier) ?? identifier

这也可以很好地适用于诸如 zh-Hans 的标识符,它将返回“中文,简体”。

请注意,我建议在末尾添加 ?? identifier,因为在无效标识符的情况下,localizedString(forIdentifier:) 返回一个可选项,在这种情况下,您可以回退到标识符本身,因此您不必处理可选字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接