PolyglotLocalization 0.8.1

PolyglotLocalization 0.8.1

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布日期最后发布2019年5月
SPM支持 SPM

blurkidi 维护。



Polyglot 允许在 Interface Builder 中直接从 Storyboard/XIB 文件本地化用户界面。

它为常见的 UI 元素提供扩展,以便在 Interface Builder 中设置本地化文本。例如,UILabel 将显示一个 "Text Key" 属性。当设置了值时,Polyglot 将使用该值调用 NSLocalizedString 并将其设置到标签的文本属性中。

为什么选择 Polyglot?

已经存在几种国际化 UI 的方式

  • 传统上,我们会对每个区域创建每个 Storyboard。这使得 Storyboard 非常难以维护。
  • 为每个 UI 元素定义 出初始化器 并使用 NSLocalizedString 设置文本是一个常见的做法。这会增加不必要的初始化器,并产生大量的模板代码。
  • 基础国际化 是一个用于本地化 UI 的强大工具,但让我们面对现实,它并不是最佳解决方案。生成的 字符串文件 很难维护,且在修改 Storyboard 时对开发者不够友好。

Polyglot 并不试图取代这些工具,而是提供了一种本地化过程的补充方法。与创建初始化器相比,它是一种干净且简单的解决方案。同时,它也易于维护,并保持对 字符串文件 的控制。

系统要求

  • iOS 8.0+ / macOS X 10.9+
  • Xcode 7.0+

设置

CocoaPods

请确保您正在使用最新的 CocoaPods 版本。

然后在 podfile 中添加 Polyglot pod。以下是一个 iOS 项目的 podfile 示例

platform :ios, '8.0'
use_frameworks!

pod 'PolyglotLocalization'

注意 use_frameworks! 行,这一点很重要。同时,请注意最低平台版本需要遵守上面要求中的说明。

最后,别忘了更新您的 pod 并打开生成的 xcworkspace 文件

$ pod install

其他

还有其他方法可以将 Polyglot 添加到您的项目中。Polyglot 是一组用 Swift 编写的扩展,因此您可以将文件复制到项目中(不推荐),或将项目作为依赖项添加...

请注意,由于 Interface Builder 不会识别该情况下的 inspectable 属性,因此不能将项目作为 静态库 包括。

使用方法

基本操作

一旦设置了 Polyglot,打开您的 Storyboard 或 XIB 文件。选择一个显示文本的 UI 元素(例如 UILabel),您将在属性检查器中看到一个名为 "Text Key" 的属性。将以下值设置为 "Text Key" 属性:hello_wolrd

现在您需要将相应的值添加到 Localizable.strings 文件中

"hello_wolrd" = "Hello World";

现在您可以运行应用程序,标签应显示 Hello World

属性命名

可以由 Polyglot 本地化的属性,其名称为原始属性后跟 key

  • 文本 -> 文本 Key
  • 标题 -> 标题 Key
  • 占位符 -> 占位符 Key

这样,就很容易识别每个情况下将本地化哪些属性。

基于表的键

NSLocalizedString() 有一个 tableName 属性,允许使用特定的 '.strings' 文件。Polyglot 提供以下格式以指定表名

[table_name].string_key

因此,如果您想从 'Common.strings' 文件中使用 'field_title' 键,您可以在 Interface Builder 中设置如下:

[Common].field_title

CSV 属性

当一个元素列表需要本地化时,键将以 CSV(逗号分隔值)指定。例如,分段控件就是这种情况。相应的属性将按如下方式命名:标题 KeysCSV

键列表通过提取逗号分隔值获得。值将被修剪,所以逗号旁边的空格将被忽略。

然后,每个键都将用来本地化相应的元素。例如,第一个键将用于本地化第一个段,依此类推。以下示例将修改前三个段的标题:

segment_one, segment_two, segment_three

如果存在超过三个段,则其余段不会被修改。同样,我们可以留空元素以忽略某些元素。以下示例将仅修改第一个和第三个段的标题

segment_one, , segment_three

UIButton

UIButton 允许为每个状态设置标题文本。对此,Polyglot 为每种状态提供了一种属性:默认、高亮、选中和禁用。

如果我们只需要为所有状态分配一个标题,我们只需分配 默认标题 Key 并将其他空余项留空。

高级

自定义密钥管理

Polyglot 允许您配置如何处理密钥。您需要修改 Polyglot.localizer 来设置自己的实现。

默认情况下,它解析表格和上面在“基于表格的键”中指定的密钥。这通过 TabledLocalizer 类实现。

假设我们想验证每个密钥都已实际翻译,否则抛出致命错误。我们像这样配置 Polyglot

        Polyglot.localizer = TabledLocalizer { key, tableName in
            let result = NSLocalizedString(key, tableName: tableName, value: "{NOTFOUND}", comment: key)
            if result == "{NOTFOUND}" {
                fatalError("Poliglot: Key '\(key)' not found")
            }
            return result
        }

我们需要在应用程序启动时运行此代码,在 UI 加载之前。对于 iOS,它通常在 UIApplicationDelegate.application(application, didFinishLaunchingWithOptions) 实现中。而对于 MacOS 应用程序,您应该在您的 NSApplicationDelegate 中覆盖 awakeFromNib 并将代码放置在那里。

    override func awakeFromNib() {
        Polyglot.localizer = ...
    }

不要忘记导入模块

    import PolyglotLocalization

还有一件事...

如果你喜欢这个库,请确保分享它!

证书

Polyglot 根据 MIT 许可证发布。有关详细信息,请参阅 LICENSE。