【问题标题】:How to pod Localized interface files(XIB, Storyboard) as xcode project structure and make internationalization work?如何将本地化的界面文件(XIB、Storyboard)作为 xcode 项目结构并进行国际化工作?
【发布时间】:2016-08-04 10:08:20
【问题描述】:

正如 cocoapods 1.0.0.beta.1 的 changes 所说“使用 Base Internationalization 的本地化界面文件(XIB,Storyboard) - Base.lproj/Main.xib 和 en.lproj/Main.strings 表示为名为 Main.xib 的变体组”和 cocoapods 1.0.0.beta.1 “使用 Base Internationalization 时变体组使用 XIB 或 Storyboard 名称的特殊情况接口文件。”

我参考 demo 并使用 resource_bundles 来组织我的 podspecs 上的资源。

s.resource_bundles = {
     'Resources' => ['LocalizationDemo/LocalizationDemo/Resources/**/*.{lproj,storyboard}']
}

我的 cocoapods 版本是 1.0.1,但目录结果是

-Resources
--en.lproj
---LocalizationDemo.strings
--LocalizationDemo.storyboard
--de.lproj
---LocalizationDemo.strings

这不是我期望的结果目录,接口国际化不起作用。 云谁给我一个正确的用法或demo?

添加:我使用 xcode 的导入/导出本地化,然后再将其添加到其他项目。我希望它可以通过直接导入的 xliff 文件来工作,而不是添加 IBOutlet 或 UI 控件的子类。

【问题讨论】:

标签: ios storyboard localizable.strings podspec


【解决方案1】:

您应该为 XIB OR Storyboard Views 中使用的 controls 编写类,并将这些类分配给相应的控件类型,如下所示 -

class LocalizedTextField: UITextField {

    override func drawPlaceholderInRect(rect: CGRect) {

        let localizedPlaceHolder = self.placeholder!.localized
        self.placeholder = localizedPlaceHolder
        super.drawPlaceholderInRect(rect)
    }
}
class LocalizedLabel : UILabel {
    override func awakeFromNib() {
        if let text = text {
            self.text = text.localized
            self.bounds.size.width = CGFloat.max
            self.sizeToFit()
        }
    }
}

class LocalizedButton : UIButton {
    override func awakeFromNib() {
        for state in [UIControlState.Normal, UIControlState.Highlighted, UIControlState.Selected, UIControlState.Disabled, UIControlState.Focused] {
            if let title = titleForState(state) {
                setTitle(title.localized, forState: state)
            }
        }
    }
}

extension String {

    var localized: String {
        let localizedValue =  NSLocalizedString(self, tableName: nil, bundle: NSBundle.mainBundle(), value: "", comment: "")
        if localizedValue == "" {

            return self
        }
        else
        {
            return localizedValue
        }
        return self

    }
}

【讨论】:

  • 我在 pod 到其他项目之前使用 xcode 的导入/导出本地化。我希望它可以通过直接导入的 xliff 文件而不是添加 IBOutlet 或 UI 控件的子类来工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多