我该如何编译 .po 使用XgetText递归带有单个命令的XgetText?

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

有帮助吗?

解决方案

知道了:

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

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

是的Google!

其他提示

对于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

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

之后您可以运行以下命令:

find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ;

在运行命令之前必须存在输出文件,因此可以将新定义与之合并。

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

xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"`

生成用于在扩展名为PHP的文件中的方法GetText的所有用途的条目,包括子文件夹,并将其插入Translations/Message.pot中。

您无法使用一个命令来实现此目标。 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 每次调用(即每个输入源文件)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top