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

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"
}

关键说明

  1. 脚本代码判断:iOS 16及以上版本可以直接通过Locale.language.script获取语言对应的脚本标识,Latn就是拉丁语脚本的标准代码。
  2. 旧版本兼容:iOS 16以下没有直接获取脚本的API,维护常见拉丁语系语言代码集合是高效的兼容方案,也可以使用NSLinguisticTagger分析语言脚本类型,但前者性能更优。
  3. 边界情况处理:如果无法获取语言代码,默认返回false,你可以根据业务需求调整这个逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:15:02