递归xgettext?

问题描述 投票:8回答:5

如何使用xgettext和PHP文件通过一个命令递归地编译.po文件?

我的PHP文件存在于层次结构中,直接的xgettext命令似乎没有递归地向下挖掘。

php gettext xgettext
5个回答
18
投票

知道了:

find . -iname "*.php" | xargs xgettext

我以前尝试使用-exec,但是一次只能运行一个文件。这使它们运行在一堆。

Yay Google!


6
投票

对于WINDOWS命令行,simpe解决方案是:

 @echo off
echo Generating file list..
dir html\wp-content\themes\wpt\*.php /L /B /S > %TEMP%\listfile.txt
echo Generating .POT file...
xgettext -k_e -k__ --from-code utf-8  -o html\wp-content\themes\wpt\lang\wpt.pot -L PHP --no-wrap -D html\wp-content\themes\wpt -f %TEMP%\listfile.txt
echo Done.
del %TEMP%\listfile.txt

1
投票

您无法通过一个命令来实现。 xgettext选项--files-from是您的朋友。

find . -name '*.php' >POTFILES
xgettext --files-from=POTFILES

如果您肯定没有太多的源文件,也可以将findxargs结合使用:

find . -name "*.php" -print0 | xargs -0 xgettext

但是,如果源文件太多,xargs将多次调用xgettext,以便不超过平台的最大命令行长度。为了保护自己免受这种情况的侵害,您必须使用xgettext选项-j--join-existing,首先删除陈旧的消息文件,然后从一个空的文件开始,以使xgettext不会失效:

rm -f messages.po
echo >messages.po
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing

与首先提供的简单解决方案和POTFILES中的源文件列表进行比较!

find--exec一起使用是非常低效的,因为它将为每个源文件调用一次xgettext -j来搜索可翻译字符串。在xgettext -j的特定情况下,效率甚至更高,因为xgettext必须在每次调用(即每个输入源文件)时读取不断增长的现有输出文件messages.po


0
投票

这里是Windows的解决方案。首先,安装gettext并从GnuWin32工具集合中查找。


0
投票

这是我在Mac上进行递归搜索的解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.