我已经阅读了很多关于此问题的答案,但大多数都已有很多年了,我不知道最新信息是什么。
首次启动时,我的应用会询问用户他更喜欢哪种语言,而不仅仅是使用操作系统默认语言。
我认为以下代码会设置语言,但它没有完成这项工作:
UserDefaults.standard.set("AR", forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
答案 0 :(得分:2)
我用LanguageManager
单例类来处理这个问题,该类处理所有本地化。这是一些伪代码,因为它通常是一个相当大的类。
它包含所有受支持的语言环境的列表,例如:
let supportedLocales = ['en-US', 'en-CA', 'fr', 'es-ES', 'es-MX']
它还将所选语言存储在{{1}}中。当selectedLocale更改时,它会发送通知,以防您想要通知您的观点或其他任何内容:
UserDefaults
现在,为了从您的localized.strings文件中提取字符串,您无法使用标准Apple方法 - 您必须提供自己的方法。使用var selectedLocale: String? {
get {
return UserDefaults.standard.object(forKey: UserDefaultsKeys.selectedLocale) as? String
}
set (newLocale) {
let didChange = self.selectedLocale != newLocale
UserDefaults.standard.set(newLocale, forKey: UserDefaultsKeys.selectedLocale)
UserDefaults.standard.synchronize()
if didChange {
NotificationCenter.default.post(name: Notification.Name.localeDidChange, object: nil)
}
}
}
引用LanguageManager.shared.getString(for key:String, alt:String)
文件中的密钥以提取本地化字符串。
.strings
答案 1 :(得分:0)
默认为英语语言//您可以根据自己设置语言
UserDefaults.standard.set("en", forKey: "Apple")
UserDefaults.standard.synchronize()
如果您想使用当前系统语言而不是使用代码
let langStr = Locale.current.languageCode //and set in UserDeafaults
UserDefaults.standard.set(langStr, forKey: "Apple")
var currentlanguage: String?
self.currentlanguage = UserDefaults.standard.object(forKey: "Apple") as! String?
print("current language ---%@",self.currentlanguage)