2009-12-08 53 views
8

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

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

回答

17

明白了:

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

我试图用-exec之前,但只运行一次一个文件。这使他们在一堆。

Yay Google!

+0

好吧,它不适合我,但你告诉我一种可能性的方式,否则将被接受,并与它一起生活,好像没有更好的方式,这 – 2013-07-28 07:32:45

+0

嗨,尼斯工作,但becarefull添加-j在该命令,除非它不会工作 – Ata 2014-04-18 16:50:02

+2

这是错误的,因为如果文件太多以适合一个命令行,xargs会多次运行xgettext,导致较早的调用被破坏。只需要添加-j也是不对的,因为你需要先删除文件,否则你会加入旧数据。 – 2014-05-01 20:37:50

0

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

您可以运行以下命令算账:

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

的输出文件之前存在运行命令,所以新的定义可以与它合并。

+0

也许安装和使用Cygwin?我知道这不是本机解决方案,但应该得到相同的结果。 – neezer 2009-12-10 18:03:57

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 
+0

一些警告以防万一:'pygettext.py'不支持'-f'选项。 – Morwenn 2013-03-28 13:07:36

0

这是我发现的递归搜索Mac系统的解决方案:

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

生成的文件,其对方法的gettext的所有用途项扩展名是php,包括子文件夹并将它们插入到translations/messages.pot中。

+2

留下一些描述性文字 – 2015-11-05 20:46:42

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

相关问题