现在我知道苹果不推荐这个.
通常,您不应在应用程序中更改iOS系统语言(通过使用AppleLanguages pref键).这违反了在Settings应用程序中切换语言的基本iOS用户模型,并且还使用了未记录的首选项键,这意味着在将来的某个时候,键名可能会更改,这会破坏您的应用程序.
但是,这是一个应用程序,在运行中改变语言是有道理的,只要相信我.我也知道这里提出了这个问题:在运行iOS时,以编程方式动态更改语言.然而,这已经老了,我想知道是否有更新,更好或更简单的方法来做到这一点.目前在我的应用程序中,我有一个语言选择屏幕.单击此视图中的按钮可使用与该按钮关联的语言调用以下函数:
func changeLang(language: String) {
if language != (currentLang as! String?)! {
func handleCancel(alertView: UIAlertAction!)
{
}
var alert = UIAlertController(title: NSLocalizedString("language", comment: "Language"), message: NSLocalizedString("languageWarning", comment: "Warn User of Language Change Different Than Defaults"), preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler:handleCancel))
alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction) in
NSUserDefaults.standardUserDefaults().setObject([language], forKey: "AppleLanguages")
NSUserDefaults.standardUserDefaults().synchronize()
println(self.currentLang)
let alert = UIAlertView()
alert.title = NSLocalizedString("language", comment: "Sign In Failed")
alert.message = NSLocalizedString("languageChangeNotification", comment: "Notify of language change")
alert.addButtonWithTitle(NSLocalizedString("ok", comment: …Run Code Online (Sandbox Code Playgroud) 我想更改应用程序的语言。我用英语和印地语为 Main.strings 创建了两个文件。还有印地语和英语的 Localized.strings。这是我更改语言的方法:
LocalizationSystem.sharedInstance.setLanguage(languageCode: "hi")
UIView.appearance().semanticContentAttribute = .forceLeftToRight
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SwipeViewController")as! SwipeViewController
let navigationController = UINavigationController(rootViewController: vc)
navigationController.modalPresentationStyle = .overFullScreen
UIApplication.shared.keyWindow?.rootViewController = navigationController
Run Code Online (Sandbox Code Playgroud)
这是 LocalizationSystem 类
class LocalizationSystem : NSObject {
var bundle: Bundle!
class var sharedInstance: LocalizationSystem {
struct Singleton {
static let instance: LocalizationSystem = LocalizationSystem()
}
return Singleton.instance
}
override init() {
super.init()
bundle = Bundle.main
}
func localizedStringForKey(key:String, comment:String) -> String {
return bundle.localizedString(forKey: key, …Run Code Online (Sandbox Code Playgroud)