隐瞒xgettext?

nee*_*zer 8 php gettext xgettext

如何.po使用xgettext使用带有单个命令的PHP文件递归编译文件?

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

nee*_*zer 18

得到它了:

find . -iname "*.php" | xargs xgettext
Run Code Online (Sandbox Code Playgroud)

-exec之前尝试使用,但这样一次只能运行一个文件.这将它们运行在一堆.

耶谢谷歌!

  • 这是错误的,因为如果有太多文件不适合一个命令行,xargs将多次运行xgettext,导致先前的调用被破坏.只是添加-j也是不对的,因为你需要先删除文件,否则你将加入旧数据. (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)


Gui*_*ohr 5

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

find . -name '*.php' >POTFILES
xgettext --files-from=POTFILES
Run Code Online (Sandbox Code Playgroud)

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

find . -name "*.php" -print0 | xargs -0 xgettext
Run Code Online (Sandbox Code Playgroud)

但是,如果您的源文件太多,xargs将调用xgettext多次,以便不超过您平台的最大命令行长度。为了保护自己免受这种情况的影响,您必须使用 xgettext 选项-j--join-existing首先删除过时的消息文件,然后从一个空文件开始,这样 xgettext 就不会退出:

rm -f messages.po
echo >messages.po
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing
Run Code Online (Sandbox Code Playgroud)

将其与首先给出的简单解决方案与源文件列表进行比较POTFILES

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