9

如何.po使用带有 PHP 文件的 xgettext 以递归方式编译文件?

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

4

5 回答 5

20

知道了:

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

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

耶谷歌!

于 2009-12-08T02:58:16.867 回答
7

对于 WINDOWS 命令​​行,一个简单的解决方案是:

 @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
于 2011-02-20T23:30:53.133 回答
3

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

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

如果您确定没有太多源文件,也可以find使用xargs

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

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

于 2016-09-25T22:57:23.727 回答
0

这是适用于 Windows 的解决方案。首先,安装 gettext 并从 GnuWin32 工具集中找到。

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

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

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

于 2009-12-10T16:20:41.150 回答
0

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

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

在扩展名为 php 的文件(包括子文件夹)中为方法 gettext 的所有用途生成条目,并将它们插入到 translations/messages.pot 中。

于 2015-11-05T20:12:06.957 回答