扩展 oslo.i18n 库的 gettext 支持

https://blueprints.launchpad.net/oslo.i18n/+spec/more-gettext-support

oslo.i18n 库已经支持标准的 gettext 函数。

但是,翻译需要“上下文标记”和“复数形式”的 gettext 函数。请参阅参考 - Horizon 翻译 Wiki。

问题描述

标准的 gettext 函数支持大多数翻译用例。

但有两个情况需要解决:* 同一个英文单词在不同语境下的不同翻译,例如菜单项和标签;* 某些语言(如英语)的复数形式,单数和复数项需要不同的翻译;

提议的变更

在 python gettext 模块中,“上下文标记”和“复数形式”都受支持,但没有惰性翻译支持。

计划是在 oslo.i18n 库中添加具有惰性翻译支持的这两个特性。

oslo.i18n 将提供 contextual_form 和 plural_form 作为附加属性,以及这两个属性的缩写形式“_C”和“_P”。

备选方案

实际上,我们可以不使用“上下文标记”或“复数形式”进行翻译。

但在某些情况下,“上下文标记”可以减少歧义,“复数形式”可以提高翻译质量。

Impact on Existing APIs

将在 TranslatorFactory 上提供新的 contextual_form 和 plural_form 属性,并从库中导出。

此规范目前仅涵盖用户界面字符串,消息日志不受影响。

安全影响

性能影响

要使用新方法,需要将一些 gettext 调用 _(“str”) 替换为 _C(“context”, “str”) 或 _P(“singular”, “plural”, count)。

由于新方法需要额外的参数,只有在可以使用新方法提高翻译质量的情况下,才需要切换到使用新方法。

大多数代码仍然可以使用标准的 gettext 函数。

Configuration Impact

需要更改 Jenkins 作业以提取带有上下文形式和复数形式的可翻译消息。

开发人员影响

此规范只是向 oslo.i18n 添加更多函数,开发人员只需在改进翻译时切换到新函数即可。

如果没有问题,代码仍然可以使用标准的 gettext 函数。

Testing Impact

实现

负责人

主要负责人

alexepico

其他贡献者

anish-developer

里程碑

完成目标里程碑

工作项

  • 扩展 Message 类以支持 contextual_form 和 plural_form;

  • 在 TranslatorFactory 上导出 contextual_form 和 plural_form;

  • 记录何时以及如何使用 contextual_form 或 plural_form 属性;

  • 更改 Jenkins 作业以提取带有上下文形式和复数形式的可翻译消息;

孵化

N/A

采用

N/A

N/A

预计 API 稳定

将在 oslo.i18n 的 TranslatorFactory 上提供新的 contextual_form 和 plural_form 属性。

文档影响

使用示例更新 oslo.i18n 的开发者文档。

如果开发者使用,翻译团队需要翻译“上下文标记”和“复数形式”的 gettext 消息。

依赖项

参考资料

注意

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