Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 动态编程本地化故事板_Ios_Swift - Fatal编程技术网

Ios 动态编程本地化故事板

Ios 动态编程本地化故事板,ios,swift,Ios,Swift,我的应用程序允许用户更改国家,所以如果他们更改为泰国,我应该更新我的故事板等的语言。 P/S:我看到很多人说,如果你重新启动应用程序,你会没事的,但这确实是我想要防止的用户体验问题。 以下是我当前的尝试,它适用于通过编程创建/修改/定义的文本,但不会更新故事板上的文本: import UIKit class LocalizationHelper: NSObject { static var bundle: NSBundle? static let sharedInstance =

我的应用程序允许用户更改国家,所以如果他们更改为泰国,我应该更新我的故事板等的语言。 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()
        }
    }

}
打印语句结果为

Optional(NSBundle </var/mobile/Containers/Bundle/Application/91776A02-BADA-4EC9-A451-45A453B84C83/Appname.app/th.lproj> (not yet loaded))
这有什么关系吗? 为了记录在案,我引用了这个


p/S:我的Main.storyboard库中也有Main.stringThai,只是它们只有在我更改系统语言时才会更新:

我相信您已经为storyboard中的每个UI组件定义了插座。您只需调用NSLocalizedString即可将其本地化:

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

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

很抱歉,我只有一个故事板,也就是说,我需要在我的选项卡栏控制器项中创建每个outlet,包括文本,并在每个视图中更新它们。因此,我也在避免这样做
let storyboard = UIStoryboard(name: "MainStoryboard_English", bundle: nil)