2017-03-18 76 views
0

所以我有這個問題,我想本地化我的應用程序中的所有視圖。我已經提供了包含所有翻譯的Localizable字符串文件。然而,當我試圖使用本地化字符串的文件的故事板,它顯示了這樣的代碼:iOS本地化:動態本地化視圖而不會搞亂故事板/筆尖字符串文件

/* Class = "UILabel"; text = "Name:"; ObjectID = "21M-2X-4Pf"; */ 
"21M-2X-4Pf.text" = "Some text to localize"; 

而且我已經有翻譯某些文本本地化的本地化字符串的文件。但手動將它們交叉引用到所有語言似乎是一種痛苦。特別是當故事板更改時,我必須重新導出它們並添加新的。

回答

0

我已經有一個班語言管理器,爲我本地化字符串。這是一個非常簡單的類,它最重要的方法是這樣的

func localizeString(stringToLocalize:String) -> String 
{ 
    // Get the corresponding bundle path. 
    let selectedLanguage = self.getLanguage() 
    let path = Bundle.main.path(forResource: selectedLanguage, ofType: "lproj") 

    // Get the corresponding localized string. 
    let languageBundle = Bundle(path: path!) 
    return languageBundle!.localizedString(forKey: stringToLocalize, value: "", table: nil) 
} 

我在此寫循環的方法遞歸通過視圖控制器的所有意見,他們本地化,因爲它去擴展。我決定分享這個,因爲我認爲它非常有用,可以在任何視圖控制器中以即插即用的方式工作,並且可以避免導出Storyboardy字符串文件的循環,添加到它們中,並在發生更改時重新集成它們。這樣您只需添加Localizable.strings文件即可自動處理所有內容。

func localizeUI(parentView:UIView) 
{ 
    for view:UIView in parentView.subviews 
    { 
     if let potentialButton = view as? UIButton 
     { 
      if let titleString = potentialButton.titleLabel?.text { 
       potentialButton.setTitle(localizeString(stringToLocalize: titleString), for: .normal) 
      } 
     } 

     else if let potentialLabel = view as? UILabel 
     { 
      if potentialLabel.text != nil { 
       potentialLabel.text = localizeString(stringToLocalize: potentialLabel.text!) 
      } 
     } 

     localizeUI(parentView: view) 
    } 
}