PHP gettext找不到任何转换的日志字符串

时间:2012-09-21 14:26:55

标签: php internationalization translation gettext po

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

echo _("string to be translated");

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

2 个答案:

答案 0 :(得分:7)

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

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

  1. 通过在gettext函数中包装字符串来准备源代码。
  2. 将准备好的字符串解压缩到POT文件中,通常是using xgettext,但可能使用自定义解析器/提取器和Kunststube\POTools这样的库(无耻的自我推销)。
  3. 从解压缩的模板文件using msginit创建PO文件。
  4. 翻译PO文件。
  5. 保持更新的源/ POT文件与PO文件using msgmerge同步。
  6. 将PO文件编译为MO文件using msgfmt
  7. 冲洗,重复。
  8. 简而言之,这是正确的gettext工作流程,它解决了翻译过程中的大多数问题。特别是如果你有分布式翻译器,你通常会有时间延迟,并且在更新源代码和翻译之间存在重叠。没有自动字符串提取和msgmerge实用程序,这个过程很容易陷入混乱,这就是为什么你应该坚持上述步骤。

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

答案 1 :(得分:0)

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