如何使用xgettext通过单个命令递归地编译.po文件?
我的PHP文件存在于一个层次结构中,直接的xgettext命令似乎不会递归地向下挖掘。
发布于 2009-12-08 10:58:17
明白了:
find . -iname "*.php" | xargs xgettext我之前曾尝试使用-exec,但它一次只能运行一个文件。这使他们在集群上运行。
耶,谷歌!
发布于 2011-02-21 07:30:53
对于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发布于 2016-09-26 06:57:24
您不能用一条命令就能做到这一点。xgettext选项--files-from是您的朋友。
find . -name '*.php' >POTFILES
xgettext --files-from=POTFILES如果您确信没有太多的源文件,则也可以在xargs中使用find
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中的源文件列表进行比较!
在--exec中使用find是非常低效的,因为它会为每个源文件调用一次xgettext -j来搜索可翻译的字符串。在xgettext -j的特殊情况下,效率甚至更低,因为xgettext必须在每次调用(即每个输入源文件)时读取不断增长的现有输出文件messages.po。
https://stackoverflow.com/questions/1864233
复制相似问题