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

111*_*110 7 ios swift ios8

我正在尝试实现可以​​更改应用程序语言的功能.
我试着像这样设置:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("de", forKey: "AppleLanguages")
Run Code Online (Sandbox Code Playgroud)

应用程序重启后语言仍为"系统默认".
现在我通过设置测试不同的语言Scheme > Application Language > language.
但用户是否可以单击按钮并在重新启动后查看所选语言?

还有什么方法可以避免在重启时更改语言?

huj*_*eng 14

您必须AppleLanguages使用数组而不是字符串设置密钥:

UserDefaults.standard.set(["de"], forKey: "AppleLanguages")
Run Code Online (Sandbox Code Playgroud)


小智 7

是的,您可以立即更改应用语言,例如,

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)
Run Code Online (Sandbox Code Playgroud)

将NSUserDefaults值用于语言.


roy*_*rma 5

这是您在启动以下语言之前更改语言的方式swift-

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

1.创建自己的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))
Run Code Online (Sandbox Code Playgroud)

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

//@UIApplicationMain <-- COMMENT THIS OUT
class AppDelegate: UIResponder, UIApplicationDelegate 
Run Code Online (Sandbox Code Playgroud)

这将使您的应用强制进入某个语言环境,而无需任何启动

  • 遗憾的是,这对我不再适用了……有人在 swift 3 xcode 7+ 中也遇到过问题吗? (2认同)

归档时间:

查看次数:

13581 次

最近记录:

7 年,2 月 前