【问题标题】:Swift - how to get ios device current languageSwift - 如何获取 ios 设备当前语言
【发布时间】:2019-09-29 08:58:54
【问题描述】:

我的设备运行 iOS 12,并以英语为主要语言,希伯来语为次要语言。

现在我用英语打开我的应用程序,因为它是基本本地化。

在应用程序中,我列出了三种语言:英语、希伯来语和法语。

起初属性Locale.preferredLanguages结果是:["en-IL", "he-IL", "fr-IL"]

如果我想在不更改操作系统语言的情况下本地化整个应用程序,我只更改 UserDefaults 上的 AppleLanguages 数组,如下所示:

func currentAppleLanguage() -> String {
    return (UserDefaults.standard.object(forKey: "AppleLanguages") as? NSArray)?
        .firstObject as? String ?? ""
}
func setAppleLanguageTo(lang: String) {
    UserDefaults.standard.set([lang], forKey: "AppleLanguages")
}

在进行更改后,我将重新启动我的应用程序并更改语言。

问题是在我将AppleLanguages 更改为UserDefaults 例如"he" 后,Locale.preferredLanguages 属性变为:["he"]

所以现在我没有在操作系统的设置应用程序中设置的preferredLanguages 后备本地化。

此外,我现在想知道,即使我像 facebook 一样使用 AppleLanguages 更改应用程序语言后,如何在操作系统上获取当前正在运行的设备语言

我想提一下,当我将应用程序语言的运行方案编辑为另一种语言时,它也会更改 AppleLanguages。

【问题讨论】:

    标签: ios swift locale


    【解决方案1】:

    不要只用一个值替换“AppleLanguages”数组,而是更新现有列表,以便将指定的语言移到顶部。

    func currentAppleLanguage() -> String {
        return UserDefaults.standard.stringArray(forKey: "AppleLanguages")?.first ?? ""
    }
    
    func setAppleLanguageTo(lang: String) {
        // Get the current list
        var languages = UserDefaults.standard.stringArray(forKey: "AppleLanguages") ?? []
        // Get all locales using the specified language
        let matching = languages.filter { $0.hasPrefix(lang) }
        if matching.count > 0 {
            // Remove those entries from the list
            languages.removeAll { $0 == lang }
            // Add them back at the start of the list
            languages.insert(contentsOf: matching, at: 0)
        } else {
            // It wasn't found in the list so add it at the top
            languages.insert(lang, at: 0)
        }
        UserDefaults.standard.set(languages, forKey: "AppleLanguages")
    }
    

    这会保留完整列表。它只是对值重新排序,因此所需的语言是第一位的。

    【讨论】:

    • 好的,它可能会有所帮助,它回答了我的第一个问题,但是有没有办法保存或获取在设置应用程序上设置的当前 iOS 系统语言,如 facebook 呢?
    • 我不使用 Facebook,所以我不知道您指的是什么。但通常,应用使用 Locale.current 来确定用户的区域设置,包括语言。
    • 帖子中的屏幕截图来自 facebook 语言设置屏幕,我的手机设置为英语,facebook 应用程序设置为希伯来语,列表中的第一个选项显示 Match phone language,带有希伯来语字幕告诉 @987654323 @
    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2014-08-26
    • 1970-01-01
    • 2012-04-20
    • 2023-04-06
    • 2014-10-05
    相关资源
    最近更新 更多