iOS SDK如何检测系统首选语言属于拉丁语系或非拉丁语系?
检测iOS首选语言是否属于拉丁语系的实现方案
iOS SDK没有直接提供判断语言是否属于拉丁语系的API,但我们可以通过语言对应的Unicode脚本类型来实现需求——拉丁语系的语言普遍使用Latn(拉丁语脚本)标识,而非拉丁语系的语言(如中文、日语)则使用各自的脚本(如Hans、Jpan)。
结合你已有的获取ISO语言代码的方法,我们可以扩展出isLatinLanguage()函数,具体实现如下:
完整实现代码
private func currentLanguageCode() -> String? { guard #available(iOS 16, *), let localeLanguageCode = Locale.current.language.languageCode else { return Locale.current.languageCode } return localeLanguageCode.identifier } private func isLatinLanguage() -> Bool { guard let languageCode = currentLanguageCode() else { return false } // 根据语言代码创建Locale实例 let locale = Locale(identifier: languageCode) // 获取语言对应的脚本代码(iOS 16+ 用新API,旧版本用兼容方式) let scriptCode: String? if #available(iOS 16, *) { scriptCode = locale.language.script?.identifier } else { // 旧版本通过维护常见拉丁语系语言代码集合覆盖主流场景 let latinLanguageCodes: Set<String> = ["en", "fr", "de", "es", "it", "pt", "nl", "ru", "pl", "ro", "hu", "cs", "da", "sv", "no", "fi", "el"] return latinLanguageCodes.contains(languageCode) } // 拉丁语脚本的Unicode标识为"Latn" return scriptCode == "Latn" }
关键说明
- 脚本代码判断:iOS 16及以上版本可以直接通过
Locale.language.script获取语言对应的脚本标识,Latn就是拉丁语脚本的标准代码。 - 旧版本兼容:iOS 16以下没有直接获取脚本的API,维护常见拉丁语系语言代码集合是高效的兼容方案,也可以使用
NSLinguisticTagger分析语言脚本类型,但前者性能更优。 - 边界情况处理:如果无法获取语言代码,默认返回
false,你可以根据业务需求调整这个逻辑。
内容的提问来源于stack exchange,提问作者aguilarpgc
相关产品推荐
相关产品推荐

