gpt4 book ai didi

ios - Swift - 如何获取ios设备当前语言

转载 作者:行者123 更新时间:2023-11-29 05:26:10 84 4
gpt4 key购买 nike

我的设备运行 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")
}

进行更改后,我将重新启动应用程序,语言也会发生变化。

事情是在我将UserDefaults处的AppleLanguages更改为例如“he”之后,Locale.preferredLanguages 属性变为:["he"]

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

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

Facebook localization screen

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

最佳答案

不要仅用单个值替换“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 - Swift - 如何获取ios设备当前语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58153765/

84 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com