以编程方式本地化故事板

时间:2015-10-29 09:29:08

标签: ios swift

我的应用允许用户更改国家/地区,因此如果他们更改为泰国,我应该更新我的故事板等语言。 P / S:我见过很多人都说如果重新启动应用程序你会没事的,但这确实是我想要阻止的用户体验问题。 以下是我目前的尝试,它适用于以编程方式创建/修改/定义的文本,但它不会更新我的故事板上的文本:(

import UIKit
class LocalizationHelper: NSObject {
    static var bundle: NSBundle?
    static let sharedInstance = LocalizationHelper()

    func localizedStringForKey(key: String, comment: String) -> String {
        return (LocalizationHelper.bundle?.localizedStringForKey(key, value: comment, table: nil))!
    }

    func setLanguage(language: String) {

        NSUserDefaults.standardUserDefaults().setObject(language, forKey: "LocalizedStringUserDefaultsKey")
        NSUserDefaults.standardUserDefaults().synchronize()


        if let path = NSBundle.mainBundle().pathForResource(language, ofType: "lproj") {

            print(language)
            print(language)

            LocalizationHelper.bundle = NSBundle(path: path)
            print(LocalizationHelper.bundle)
        } else {
            NSUserDefaults.standardUserDefaults().setObject("Base", forKey: "LocalizedStringUserDefaultsKey")
            NSUserDefaults.standardUserDefaults().synchronize()
            LocalizationHelper.bundle = NSBundle.mainBundle()
        }
    }

}

print语句结果为

Optional(NSBundle </var/mobile/Containers/Bundle/Application/91776A02-BADA-4EC9-A451-45A453B84C83/Appname.app/th.lproj> (not yet loaded))

这有关系吗? 为了记录,我引用了这个

  

https://github.com/jslim89/JSLocalizedString

P / S:我的Main.storyboard(Base)中也准备好了Main.string(Thai),只是在我更改系统语言时才会更新:(

1 个答案:

答案 0 :(得分:0)

我相信你在故事板中为每个UI组件定义了出口。您只需拨打NSLocalizedString

即可对其进行本地化
self.title = NSLocalizedString("MyTitle", nil);

另一种选择可能是为每种支持的语言提供多个故事板。用户更改国家/地区后,根据支持的语言选择正确的故事板。像这样:

let storyboard = UIStoryboard(name: "MainStoryboard_English", bundle: nil)