在 运行 次更改应用程序语言

Change app language at run time

我正在尝试更改我在 运行 时使用 NSLocalizedString 获得的语言。

我知道这个问题已经被问过了,但我找不到 Swift 3 的答案。

我试过了:

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

和:

let language = "en"
let path = Bundle.main.path(forResource: language, ofType: "lproj")
let bundle = Bundle(path: path!)
let string = bundle?.localizedString(forKey: "AppleLanguages", value: language, table: nil)

但没有任何效果....

感谢您的帮助!

所以最后,我使用了 Github 上可用的自定义本地化器 class,它允许您从应用程序的任何位置切换语言,甚至可以保存以供进一步启动应用程序。

它是在swift 2.2 中编写的,但是Xcode 自动将代码更新为Swift 3. 只需更改Demo 中的位置:

notification.name == kNotificationLanguageChanged

至:

notification.name.rawValue == kNotificationLanguageChanged

https://github.com/micazeve/iOS-CustomLocalisator