设置“AppleLanguages”不会更改应用程序语言

我正试图实现一个可以改变应用程序语言的function。
我试图这样设置:

let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject("de", forKey: "AppleLanguages") 

而应用程序重启后语言仍然是“系统默认”。
现在我通过设置Scheme > Application Language > languagetesting不同的Scheme > Application Language > language
但是,用户可以点击一个button,重新启动后看到select的语言吗?

还有什么是正确的方法来避免在重新启动时更改语言?

是的,你可以立即改变应用程序的语言,

 var language = "de" let path = NSBundle.mainBundle().pathForResource(language, ofType: "lproj") let bundle = NSBundle(path: path!) let string = bundle?.localizedStringForKey("key", value: nil, table: nil) 

使用您的NSUserDefaults值语言。

以下是在swift启动之前如何更改语言 –

可以说我想强制Hebrew本地化:

1.创build您自己的Main.swift类

 import Foundation import UIKit // Your initialization code here let langCultureCode: String = "he_IL" let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject([langCultureCode], forKey: "AppleLanguages") defaults.synchronize() UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate)) 

2.删除你的AppDelegate.swift“主要”责任

 //@UIApplicationMain <-- COMMENT THIS OUT class AppDelegate: UIResponder, UIApplicationDelegate 

这将使您的应用程序强制到一个语言环境,无需任何启动

如果意思是为了testing目的,只需在模拟器设置应用程序中更改语言。
如果你正试图在你的应用程序中做出一种语言select器,那就非常痛苦 ,我认为你不应该这样做。
您的应用程序从设备读取语言和区域设置,并相应地更改UI。
忽略这种行为是困难的,你永远不会完全改变语言,例如,如果你尝试在你的应用程序中显示地图,你的设备语言是西class牙语,但是应用程序语言是英语,你会看到地图写入西class牙。
这里有一个可以帮助的项目。

你可以在AppDelegate.swift下面试试 –

 NSUserDefaults.standardUserDefaults().removeObjectForKey("AppleLanguages") NSUserDefaults.standardUserDefaults().setObject("de", forKey: "AppleLanguages" NSUserDefaults.standardUserDefaults().synchronize() 

您必须使用数组而不是string来设置AppleLanguages键:

 UserDefaults.standard.set(["de"], forKey: "AppleLanguages")