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

iOS本地化App:如何获取设备语言(而非应用语言)

获取iOS设备原生语言(不受App语言设置影响)

你的场景里,Locale.preferredLanguages和Locale.current返回的是App自身的语言配置(当前是德文),要获取设备系统层面的语言(英文),可以用以下两种方法:

iOS 16.0+ 推荐方案

苹果在iOS 16新增了Locale.system属性,直接返回系统级的区域设置,完全不受App语言配置影响:

let systemLocale = Locale.system
// 获取语言码(如"en")
let deviceLangCode = systemLocale.language.languageCode?.identifier ?? "unknown"
// 获取完整语言标识(如"en-US")
let deviceFullLang = systemLocale.language.identifier

兼容iOS 15及更早版本

对于低版本系统,需要读取系统级的UserDefaults域来获取设备语言偏好:

if let systemLangList = UserDefaults(suiteName: "com.apple.LanguageSettings")?.array(forKey: "AppleLanguages") as? [String] {
    let primaryDeviceLang = systemLangList.first ?? "unknown"
    // 提取纯语言码(去掉地区后缀)
    let langCode = primaryDeviceLang.components(separatedBy: "-").first ?? primaryDeviceLang
}

修改后的示例代码

把你的ContentView改成这样,就能直观对比App语言和设备语言:

struct ContentView: View {
    
    private var devicePrimaryLanguage: String {
        if #available(iOS 16.0, *) {
            return Locale.system.language.identifier
        } else {
            guard let systemLangList = UserDefaults(suiteName: "com.apple.LanguageSettings")?.array(forKey: "AppleLanguages") as? [String] else {
                return "unknown"
            }
            return systemLangList.first ?? "unknown"
        }
    }
    
    var body: some View {
        Form {
            Text("Hello, world")
            Text("App语言(Locale.preferredLanguages):\n\(Locale.preferredLanguages.joined(separator: ", "))")
            Text("App当前Locale:\n\(Locale.current.language.languageCode?.identifier ?? "")")
            Text("设备原生语言:\n\(devicePrimaryLanguage)")
        }
    }
}

关键说明

  • Locale.preferredLanguages/Locale.current:绑定App的本地化配置,随App语言设置变化;
  • 上述方法获取的是系统设备层面的语言偏好,完全独立于App的语言设置,满足你推进本地化流程的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:05:29