我有很多关于IOS应用程序本地化的帖子。然而,他们中的大多数人都在谈论客观C,他们没有提到快速的语言。我只是想知道在运行时更改故事板时是否可以在Xcode中使用内置的位置化功能。请参阅下面的示例链接。谢谢。
答案 0 :(得分:2)
您必须编写自定义本地化方法,否则在iPhone中您只能更改系统设置,这肯定会使设备重新启动,这里我创建了一个自定义模块 SWIFT 中的应用内本地化,可以在运行时
中更改应用的语言答案 1 :(得分:0)
如果要以编程方式本地化storyboard的标签,可以简单地将UILabel子类化并在设置文本后对其进行翻译。所以你不需要创建另一个故事板。
class TranslatedLabel: UILabel {
override func drawTextInRect(rect: CGRect) {
self.text = Language.sharedInstance.stringforKey(self.text!)
super.drawTextInRect(rect)
}
}
class Language {
class var sharedInstance : Language {
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : Language? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = Language()
}
return Static.instance!
}
func stringforKey(key:String)->String{
let lan:String = NSUserDefaults.standardUserDefaults().objectForKey("language") as! String
let string:String?
if lan.containsString("Hans"){
let path = NSBundle.mainBundle().pathForResource("zh-Hans", ofType: "lproj")
let bundle = NSBundle(path: path!)
string = bundle?.localizedStringForKey(key, value: nil, table: nil)
}else if lan.containsString("Hant"){
let path = NSBundle.mainBundle().pathForResource("zh-Hant", ofType: "lproj")
let bundle = NSBundle(path: path!)
string = bundle?.localizedStringForKey(key, value: nil, table: nil)
}else{
let path = NSBundle.mainBundle().pathForResource("en", ofType: "lproj")
let bundle = NSBundle(path: path!)
string = bundle?.localizedStringForKey(key, value: nil, table: nil)
}
return string!
}
}