【发布时间】:2015-10-26 08:36:55
【问题描述】:
我在谷歌上搜索过很多关于 IOS 应用本地化的帖子。但是,他们中的大多数都在谈论objective-C,而没有提到swift语言。我只是想知道在运行时更改情节提要时是否可以在 Xcode 中使用内置的定位功能。请参阅下面的链接示例。谢谢。
【问题讨论】:
标签: ios xcode swift localization storyboard
我在谷歌上搜索过很多关于 IOS 应用本地化的帖子。但是,他们中的大多数都在谈论objective-C,而没有提到swift语言。我只是想知道在运行时更改情节提要时是否可以在 Xcode 中使用内置的定位功能。请参阅下面的链接示例。谢谢。
【问题讨论】:
标签: ios xcode swift localization storyboard
您必须编写自定义本地化方法,否则在 iPhone 中您只能从 系统设置 进行更改,这肯定会使设备 重新启动,这里我创建了一个自定义模块SWIFT 中的 应用内本地化,可以在 runtime
中更改应用的语言【讨论】:
如果您想以编程方式本地化情节提要的标签,您可以简单地将 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!
}
}
【讨论】: