设置“AppleLanguages”不会更改应用程序语言
我正试图实现一个可以改变应用程序语言的function。
我试图这样设置:
let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject("de", forKey: "AppleLanguages")
而应用程序重启后语言仍然是“系统默认”。
现在我通过设置Scheme > Application Language > language
testing不同的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")