我的应用程序可以在运行时更改语言,并建议用户重新启动应用程序。我是这样做的:
typealias LanguageLocaleType = (language: String?, locale: String?, title: String)
let elements: [LanguageLocaleType] = [
(nil, nil, "System Default"),
("en", "en_US", "English"),
("ar", "ar_SA", "Arabic"),
]
//...func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)...
let element = elements[indexPath.row]
guard let language = element.language else {
// How to really reset app back to OS language/locale???
UserDefaults.standard.removeObject(forKey: "AppleLanguages")
UserDefaults.standard.removeObject(forKey: "AppleLocale")
return
}
UserDefaults.standard.set([language], forKey: "AppleLanguages")
if let locale = element.locale, !locale.isEmpty,
Locale.current.identifier != locale,
!Locale.current.identifier.hasPrefix("\(language)_") {
UserDefaults.standard.set(locale, forKey: "AppleLocale")
}
我想提供一种方法,可以将语言设置为列表,并选择正确的语言,其中之一是将语言设置回“系统默认”。但是,我找不到任何查找操作系统级别语言和区域设置的方法。因为在我尝试更改
UserDefaults
后,Bundle.main.preferredLocalizations
不可靠且与系统默认值不匹配(即使我从User Default
中删除该键)。有没有一种方法可以获取操作系统级别的语言和区域设置而不是应用程序级别的呢?
Locale.current.languageCode
获取应用程序语言,使用Locale.preferredLanguages
获取用户首选语言。在重置时,可以从Locale.current.languageCode
获取当前语言代码。 - LC 웃