首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归xgettext?

递归xgettext?
EN

Stack Overflow用户
提问于 2009-12-08 10:32:22
回答 5查看 7K关注 0票数 9

如何使用xgettext通过单个命令递归地编译.po文件?

我的PHP文件存在于一个层次结构中,直接的xgettext命令似乎不会递归地向下挖掘。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-08 10:58:17

明白了:

代码语言:javascript
复制
find . -iname "*.php" | xargs xgettext

我之前曾尝试使用-exec,但它一次只能运行一个文件。这使他们在集群上运行。

耶,谷歌!

票数 20
EN

Stack Overflow用户

发布于 2011-02-21 07:30:53

对于WINDOWS命令行,simpe解决方案是:

代码语言:javascript
复制
 @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
票数 7
EN

Stack Overflow用户

发布于 2016-09-26 06:57:24

您不能用一条命令就能做到这一点。xgettext选项--files-from是您的朋友。

代码语言:javascript
复制
find . -name '*.php' >POTFILES
xgettext --files-from=POTFILES

如果您确信没有太多的源文件,则也可以在xargs中使用find

代码语言:javascript
复制
find . -name "*.php" -print0 | xargs -0 xgettext

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

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1864233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档