2

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

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. 为什么评论中有两行source/line?(我想这是因为我们在源中移动了消息。)

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

  3. 还是我不建议--join-existing在构建脚本中使用?(但有时我们在pot文件中有手动项,那么如何解决?)

4

2 回答 2

2

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


解决方法 1

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

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

解决方法 2

不要使用该选项--join-existing并将手动项目放在一个虚拟的 php 文件中。

于 2014-11-27T20:29:13.763 回答
0

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

于 2014-11-27T16:53:01.150 回答