2015-10-29 43 views
0

我的应用程序允许用户更改国家,所以如果他们更改为泰国,我应该更新我的故事板等语言。 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.string(泰国)在我Main.storyboard(基地)准备好,当我改变系统语言:(

回答

0

我相信你只是他们只更新为故事板中的每个UI组件定义的出口。你可以简单地通过调用NSLocalizedString本地化他们:

self.title = NSLocalizedString("MyTitle", nil); 

另一种选择可能是有多个故事板为每个受支持的语言。一旦用户改变国家,根据支持的语言选择正确的故事板。事情是这样的:

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

对不起,我只有1分镜,另外,这意味着我需要创建的每个出口(包括在我的标签栏控制器项目文本并更新他们在每一个viewWillAppear中因此我避免。太 – Happiehappie