You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用中如何展示包含地区变体的当前选中语言版本

解决方案

你当前的实现仅调用了localizedString(forLanguageCode:)方法,该方法只会解析标识中的语言部分,会自动忽略地区、脚本后缀,因此无法获取变体信息。

方案1:直接使用系统原生完整名称生成(推荐)

Bundle.main.preferredLocalizations返回的本身就是完整的Locale标识(格式如en-CA、zh-Hans-HK),直接传入localizedString(forIdentifier:)即可生成符合系统规范的带地区的语言名称:

guard let localeIdentifier = Bundle.main.preferredLocalizations.first else { return nil }
let currentLocale = Locale.autoupdatingCurrent
guard let fullLanguageName = currentLocale.localizedString(forIdentifier: localeIdentifier)?.localizedCapitalized else { return nil }

示例效果:当标识为en-US时返回值为英语(美国),标识为fr-CA时返回值为法语(加拿大),完全匹配你需要的展示格式。

方案2:手动拆分拼接(自定义格式适用)

如果需要调整分隔符、或者要单独控制语言/地区的展示逻辑,可以拆分获取后自行拼接:

guard let localeIdentifier = Bundle.main.preferredLocalizations.first else { return nil }
let targetLocale = Locale(identifier: localeIdentifier)
let currentLocale = Locale.autoupdatingCurrent

// 分别获取语言和地区的本地化名称
guard let langName = currentLocale.localizedString(forLanguageCode: targetLocale.languageCode ?? "")?.localizedCapitalized else { return nil }
// 无匹配地区时直接返回纯语言名
guard let regionName = currentLocale.localizedString(forRegionCode: targetLocale.regionCode ?? "") else { 
    return langName
}
// 可自定义拼接格式
let fullLanguageName = "\(langName)(\(regionName))"

内容的提问来源于stack exchange,提问作者Alexandru Motoc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 08:36:02