如何使用xgettext与PHP文件一起使用单个命令递归编译.po
文件?
我的PHP文件存在于层次结构中,并且直接xgettext
命令似乎没有递归地挖掘。
答案 0 :(得分:18)
知道了:
find . -iname "*.php" | xargs xgettext
我之前尝试使用-exec
,但这样一次只能运行一个文件。这将在一堆上运行它们。
耶和华!
答案 1 :(得分:6)
对于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
答案 2 :(得分:0)
这是Windows的解决方案。首先,安装gettext并从GnuWin32工具集中查找。
之后您可以运行以下命令:
find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ;
输出文件必须在运行命令之前存在,因此新定义可以与它合并。
答案 3 :(得分:0)
这是我在Mac上进行递归搜索的解决方案:
xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"`
为扩展名为php的文件中的方法gettext的所有用法生成条目,包括子文件夹并将它们插入到translations / messages.pot中。
答案 4 :(得分:0)
使用一个命令无法实现此目的。 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
中的源文件列表的简单解决方案进行比较!
将find
与--exec
一起使用是非常低效的,因为它会为每个源文件调用xgettext -j
一次以搜索可翻译的字符串。在xgettext -j
的特定情况下,它的效率更低,因为xgettext必须在每次调用时读取不断增长的现有输出文件messages.po
(即每个输入源文件)。