我有一个构建脚本,可以扫描源代码目录(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 ""
为什么评论中有两行源/行?(我猜这是由于我们在源中移动了消息。
那么,如果同一个文件更新了内容,如何让 xgettext 忽略呢?
还是我不应该建议在构建脚本中使用
--join-existing
?(但是有时候我们在pot文件中有手动项目,那么如何解决呢?
听起来逻辑上xgettext
附加信息(甚至是源引用),因为它是使用选项 --join-existing
显式设置的。但以下解决方法可能会有所帮助。
解决方法 1
在构建新 pot 之前,使用 sed 从 pot 文件中删除以前的源引用:
sed -i.old '/^#: /d' languages/myapp/myapp.pot
解决方法 2
不要使用选项--join-existing
并将手动项目放在虚拟 php 文件中。
如果使用 poedit,这会有问题吗?它是带有"更新"按钮的GUI应用程序。Poedit扫描所有文件并收集所有可翻译的字符串。我已经用了很多时间了,它的工作很完美。