测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2018 年 1 月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✗ |
由 Jindrich Dolezy 维护。
LocalizeNIB 帮助您本地化故事板和 XIB 文件。将您想要本地化的所有内容放入您的 UIViewController
中的 localizables
控件集合中,LocalizeNIB 将使用 NSLocalizedString
对所有内容进行本地化。不再需要手动处理难以阅读的组件 ID !
LocalizeNIB 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "LocalizeNIB"
LocalizeNIB 默认使用 NSLocalizedString
。如果您准备好了 Localizable.strings 文件,那么您只需要将所有想要本地化的组件添加到 localizables
控件集合中(如下图中所示)。LocalizeNIB 将使用故事板中设置的字符串值作为本地化的键。对于常见的 UIKit 组件,提供了扩展,因此如果您不想使用自定义类,则不需要这样做。
将 LocalizeNIB.instance.debugMode
设置为 true 将启用调试模式。LocalizeNIB 将记录未知的字符串键和未能或不支持本地化 altogether 的对象。记录未知键仅在
如果您使用自己的日志解决方案,您可以通过提供 LocalizeNIB.instance.debugBlock
与 LocalizeNIB 一起集成。
您可以通过设置 LocalizeNIB.instance.stringProvider
块并提供自定义本地化字符串来设置 LocalizeNIB.instance.stringProvider
。此块会被频繁调用,因此它应该迅速返回。
以下示例获取所有传入的键并简单地返回它们的上标形式。
LocalizeNIB.instance.stringProvider = { $0.uppercased() }
您可以通过实现 Localizable
协议为任何对象提供自定义本地化。UIKit 类默认提供了扩展。
extension UILabel: Localizable {
open func localize(provider: LocalizedStringProvider) throws {
text = text.flatMap { provider($0) }
}
}
您可以通过提供 LocalizeNIB.instance.localizeAll
块来自定义本地化过程或从本地化中排除某些对象。该块会为每个要本地化的对象调用。您如果在这个块中返回 true,则可以跳过此对象的本地化。
以下示例为所有带有 localizeAll
文本的 UILabel
组件提供自定义文本。
LocalizeNIB.instance.localizeAll = { object, stringProvider in
if let label = object as? UILabel, label.text == "localizeAll" {
label.text = "Caught by localizeAll block"
return true
} else {
print("About to localize \(object)")
return false
}
}
当您定制 LocalizeNIB.instance
的行为并使用默认的Storyboard时,必须在您的 UIApplicationDelegate
的 init 方法中进行所有定制,否则Storyboard将在您的自定义生效之前进行本地化。请参阅示例项目中的 AppDelegate 作为参考。
要运行示例项目,请先克隆仓库,然后从 Example 目录运行 pod install
。
Jindra Dolezy, [email protected]
LocalizeNIB 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。