故事板本地化在运行时很快

时间:2015-08-04 04:41:20

标签: ios xcode swift localization storyboard

我有很多关于IOS应用程序本地化的帖子。然而,他们中的大多数人都在谈论客观C,他们没有提到快速的语言。我只是想知道在运行时更改故事板时是否可以在Xcode中使用内置的位置化功能。请参阅下面的示例链接。谢谢。

http://tinypic.com/view.php?pic=fw3cyu&s=8#.VcBAIniloRl

2 个答案:

答案 0 :(得分:2)

您必须编写自定义本地化方法,否则在iPhone中您只能更改系统设置,这肯定会使设备重新启动,这里我创建了一个自定义模块 SWIFT 中的应用内本地化,可以在运行时

中更改应用的语言

https://github.com/pr0gramm3r8hai/InAppLocalize

答案 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!
    }
}