使用 zend-framework3 和 gettext 处理文本域

Handle textDomains with zend-framework3 and gettext



我们正在将 ZF3 用于具有国际化的大型应用程序。
i18n 是通过 zend-i18n、zend-mvc-i18n 和 xgettext cli 完成的,用于提取/编译 pot / po / mo 文件。
对于像 Contact 这样可以是动词或名词的词,我们指定了 $textDomain$this->translate('Contact', 'Verb')$this->translate('Contact', 'Noun').

问题是,当我们提取这些字符串时,它们都在同一个 pot 文件中。
由于 Zend 通过 textDomain 加载翻译文件,如果我们可以通过 textDomain 拆分 pot 文件会更好,但 xgettext 似乎不能这样做。

有人可以帮助我们使用 Zend 和 gettext 正确管理 textDomains 吗?

对于那些可能遇到相同问题的人,我们最终创建了自己的 Gettext 文件加载器,它可以正确解析 msgctxt 和 returns 由 msgctxt 结构化的 TextDomain
我们还创建了自己的 Translator extends Zend\I18n\Translator\Translator 来覆盖 loadMessagesFrom... 函数并正确更新 $this->messages 变量