根据用户选择更改应用程序本地化

时间:2017-03-08 13:51:53

标签: ios swift swift3

我已经阅读了很多关于此问题的答案,但大多数都已有很多年了,我不知道最新信息是什么。

首次启动时,我的应用会询问用户他更喜欢哪种语言,而不仅仅是使用操作系统默认语言。

  1. 如何将应用的本地化其余部分设置为所选语言?
  2. 如何获取用户在其他视图中选择的语言?
  3. 我认为以下代码会设置语言,但它没有完成这项工作:

    UserDefaults.standard.set("AR", forKey: "AppleLanguages")
    UserDefaults.standard.synchronize()
    

2 个答案:

答案 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)