xgettext --join-existing在我的pot文件中产生了多个注释

时间:2014-11-18 17:35:31

标签: php localization gettext xgettext

我有一个构建脚本,它扫描源目录(PHP)并执行xgettext --join-existing ...以获得更新的翻译并保存到一个底池文件中,例如

find . -type f -name '*.php' -not -path './vendor/*' | 
xargs xgettext --join-existing --keyword=_e --keyword=_x 
--keyword=__ --from-code=UTF-8 --default-domain=myapp 
--output=languages/myapp/myapp.pot

我不知道为什么,经过几次代码重构和构建之后,pot文件会有这样的东西

#: src/Member/Auth.php:196
#: src/Member/Auth.php:135
msgid "Login failed!"
msgstr ""
  1. 为什么评论中有两行源/行? (我想这是因为我们已经在源头中移动了消息。)

  2. 那么,如果同一个文件有更新内容,如何使xgettext忽略?

  3. 或者我不应该建议在构建脚本中使用--join-existing吗? (但有时我们在pot文件中有手工项目,所以如何解决?)

2 个答案:

答案 0 :(得分:1)

逻辑上听起来xgettext附加信息(甚至是源参考),因为它是使用选项--join-existing显式设置的。但是下面的解决方法可能有所帮助。


解决方法1

在构建新底池之前,使用sed从pot文件中删除以前的源引用:

sed -i.old '/^#: /d' languages/myapp/myapp.pot

解决方法2

请勿使用选项--join-existing并将手册项放在虚拟php文件中。

答案 1 :(得分:0)

如果使用poedit,这会有问题吗?它是带有“更新”按钮的GUI应用程序。 Poedit扫描所有文件并收集所有可翻译的字符串。我已经使用了很长时间,并且它的工作非常完美。