强制NSLocalizedString使用Swift使用特定语言

saz*_*azz 9 localization ios swift

使用swift,我如何强制我的应用程序从特定的Localizable.strings读取数据.

我在实例化ViewController之前将它放在didFinishLaunchingWithOptions中,但它仍然显示我的英文应用程序.

NSUserDefaults.standardUserDefaults().removeObjectForKey("AppleLanguages")
NSUserDefaults.standardUserDefaults().setObject("fr", forKey: "AppleLanguages"   
NSUserDefaults.standardUserDefaults().synchronize()
Run Code Online (Sandbox Code Playgroud)

我试图像这样传递一个"AppleLanguages"键的数组,但它仍然不起作用:

NSUserDefaults.standardUserDefaults().setObject(["fr"], forKey: "AppleLanguages"
Run Code Online (Sandbox Code Playgroud)

一旦完成,我可以在应用程序内调用此内容并在不重新启动应用程序的情况下考虑更改吗?

Mar*_*kus 28

通过更改值来立即更改应用程序的语言是不可能的AppleLanguages.它需要在更改生效之前重新启动应用程序.

您的问题似乎是访问不同语言的本地化字符串而不是更改应用程序的语言,对吧?如果您希望您的应用支持多种语言,您只需提供翻译并依赖settings.app进行实际更改即可.

如果要从当前使用的本地化以外的位置访问本地化字符串,则需要访问正确的翻译包.然后只需查询该包的翻译.以下代码应该可以解决问题.

let language = "en"
let path = NSBundle.mainBundle().pathForResource(language, ofType: "lproj")
let bundle = NSBundle(path: path!)
let string = bundle?.localizedStringForKey("key", value: nil, table: nil)
Run Code Online (Sandbox Code Playgroud)


sam*_*ize 8

NSLocalizedString可以指定捆绑包。

let language = "fr"
let path = Bundle.main.path(forResource: language, ofType: "lproj")!
let bundle = Bundle(path: path)!
let localizedString = NSLocalizedString(key, bundle: bundle, comment: "")
Run Code Online (Sandbox Code Playgroud)

或者通过捆绑,您也可以localizedStringForKey:value:table:直接致电。