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
相关产品推荐
相关产品推荐

