2015-10-29 45 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