毕业 oslo.i18n

https://blueprints.launchpad.net/oslo.i18n/+spec/graduate-oslo-i18n

oslo.i18n 包含与国际化和本地化相关的模块。初始版本侧重于构建在 gettext 模块之上的翻译工具。

库名称

此库包含一些代码,最终可能在 OpenStack 之外有用,但它确实断言了一些特定于 OpenStack 的策略和行为,因此它被放置在 oslo 命名空间包中,作为 oslo.i18n

内容

此库的代码在开始使用规格文档之前从孵化器导出。请参阅 https://opendev.org/openstack/oslo.i18n

  • openstack/common/gettextutils.py

  • tests/unit/test_gettextutils.py

早期采用者

  • Keystone

实现

负责人

主要负责人

Doug Hellmann (doug-hellmann)

其他贡献者

主要维护者

每个毕业的库都需要一个主要的维护者。这可能是启动代码的同一个人,也可能是毕业代码的同一个人,或者可能是接管维护职责的人。

如果不已经是 oslo-core 团队成员的超过一个人打算作为新库的核心审查员参与,请在“其他贡献者”下列出他们。

主要维护者

Mark McLoughlin (markmc)

其他贡献者

Doug Hellmann (doug-hellmann)

安全联系人

每个毕业的库都需要一个与 OpenStack 漏洞管理团队的联系人。这可能是与主要维护者相同的人,也可能是帮助处理安全问题的现有 Oslo 团队成员,或者可能是新库开发团队中的其他人。

与 Oslo 和漏洞管理团队讨论联系人是谁,并在继续之前确保他们同意参与。

安全联系人

Doug Hellmann (doug-hellmann)

里程碑

完成目标里程碑

Juno-1

工作项

  1. https://wiki.openstack.org/wiki/Oslo/CreatingANewLibrary

  2. 在库导出之前,API 已更改,以便 USE_LAZY 仅在启动时评估一次。但是,对于使用自己的翻译的库来说,这不起作用,因为它们可能通过在应用程序有机会确定是否希望启用延迟翻译之前发生的导入来初始化。我们需要纠正这一点,可能通过更新 _make_translation_func() 以再次使用 USE_LAZY 在运行时工作。

  3. 由于每个消耗应用程序和库都将拥有自己标记函数副本,因此我们可以从 gettextutils 中删除全局标记函数。

采用说明

翻译标记函数本质上是全局变量,它们是部分函数,其翻译域参数已嵌入其中。过去,有一个全局翻译标记函数 (_()),它使用应用程序名称创建一次。这是通过在将 gettextutils.py 从孵化器复制到应用程序源代码树中时,将字符串 oslo 替换为应用程序名称来实现的。我们不再将 gettextutils.py 复制到应用程序中,并且我们将拥有创建自己的翻译标记函数的库,因此我们需要一种方法来定义具有不同翻译域的多个标记函数。

实现这一点的最简单方法是在每个消耗应用程序或库中创建一个小的“集成模块”,该模块实例化这些函数,然后让应用程序或库使用该模块而不是直接使用 oslo.i18n。这在库的 usage.rst 页面中有记录:https://docs.openstack.org/developer/oslo.i18n/usage.html

除了标记函数之外,一些应用程序还在使用来自 gettextutilsMessage 类。该类旨在成为延迟翻译的私有实现细节,并且未在 oslo.i18n 的公共 API 中公开。要将 Message 转换为翻译后的字符串,请使用 translate()。要实例化新的 Message,请使用 enable_lazy() 开启延迟翻译,然后使用 TranslatorFactory 的属性(例如 TranslatorFactory().primary)获取翻译函数,该函数将返回一个 Message 对象。

依赖项

参考资料

注意

本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode