2017-03-18 48 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) 
    } 
}