1

我有一个使用 php 的内置 Gettext / PO 支持国际化的网站

echo _("string to be translated");

该网站处于测试阶段,肯定有一些字符串没有被翻译。为了帮助调试,有没有办法记录 gettext 错误,即记录 PO 未在 PO 文件中找到任何匹配条目的字符串?

4

2 回答 2

7

您想要做的问题是您只会在运行时找到未翻译的字符串,并且仅用于实际执行的代码路径。您可能需要数年时间才能找到所有字符串,同时您必须定期查看日志文件并将更新的翻译与日志文件中发生的情况同步。这不是一种确定性的翻译方法。

如果您使用的是 gettext,则需要建立一个适合它的工作流程。gettext 工作流程和工具链经过深思熟虑和时间考验。

  1. 通过在 gettext 函数中包装字符串来准备源代码。
  2. 将准备好的字符串提取到 POT 文件中,通常使用xgettext但可能使用自定义解析器/提取器和Kunststube\POTools 之类的库(无耻的自我提升)。
  3. 使用msginit.从提取的模板文件创建 PO 文件。
  4. 翻译 PO 文件。
  5. 使用msgmerge.使更新的源/POT 文件与 PO 文件保持同步。
  6. 使用msgfmt.将 PO 文件编译为 MO 文件。
  7. 冲洗,重复。

简而言之,这是正确的 gettext 工作流程,它解决了翻译过程中的大多数问题。特别是如果您有分布式翻译器,您通常会在源代码更新和翻译进入之间存在时间滞后和重叠。如果没有自动字符串提取和msgmerge实用程序,这个过程很容易陷入混乱,这就是为什么您应该坚持上述脚步。

如果这样做,您的问题就变得无关紧要,因为您可以随时使用 gettext 实用程序或Poedit等工具检查您的 PO 文件,以查看哪些字符串未翻译。

于 2012-12-30T15:09:52.420 回答
0

可能更重要的是您的测试版将使用类似podebug的工具进行一些伪本地化。因此,一旦您提取了 PO 字符串,您就可以将它们本地化,以便查看是否所有字符串都在您的 UI 中提取。

于 2012-09-22T15:20:31.860 回答