9

.poxgettext を使用して PHP ファイルを単一のコマンドで再帰的にコンパイルするにはどうすればよいですか?

私のPHPファイルは階層に存在し、ストレートxgettextコマンドは再帰的に掘り下げていないようです.

4

5 に答える 5

20

とった:

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

以前に使用しようとして-execいましたが、一度に 1 つのファイルしか実行できませんでした。これにより、それらがまとめて実行されます。

やあグーグル!

于 2009-12-08T02:58:16.867 に答える
7

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
于 2011-02-20T23:30:53.133 に答える
3

1 つのコマンドでこれを実現することはできません。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!のソース ファイルのリストを使用して、最初に示した単純なソリューションと比較してください。

findwithを使用すると、翻訳可能な文字列を検索するためにソース ファイルごとに 1 回--exec呼び出されるため、非常に非効率的です。xgettext -j特定のケースでxgettext -jは、xgettext はmessages.po呼び出しのたびに (つまり、すべての入力ソース ファイルで) 増え続ける既存の出力ファイルを読み取らなければならないため、さらに非効率的です。

于 2016-09-25T22:57:23.727 に答える
0

これがWindows用のソリューションです。まず、gettext をインストールし、GnuWin32 ツール コレクションから検索します。

その後、次のコマンドを実行できます。

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

コマンドを実行する前に出力ファイルが存在している必要があるため、新しい定義をマージできます。

于 2009-12-10T16:20:41.150 に答える
0

これは、Mac での再帰検索で見つけた解決策です。

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

サブフォルダーを含む、拡張子が php のファイルでメソッド gettext を使用するすべてのエントリを生成し、それらを translations/messages.pot に挿入します。

于 2015-11-05T20:12:06.957 に答える