.po
xgettext を使用して PHP ファイルを単一のコマンドで再帰的にコンパイルするにはどうすればよいですか?
私のPHPファイルは階層に存在し、ストレートxgettext
コマンドは再帰的に掘り下げていないようです.
とった:
find . -iname "*.php" | xargs xgettext
以前に使用しようとして-exec
いましたが、一度に 1 つのファイルしか実行できませんでした。これにより、それらがまとめて実行されます。
やあグーグル!
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
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
!のソース ファイルのリストを使用して、最初に示した単純なソリューションと比較してください。
find
withを使用すると、翻訳可能な文字列を検索するためにソース ファイルごとに 1 回--exec
呼び出されるため、非常に非効率的です。xgettext -j
特定のケースでxgettext -j
は、xgettext はmessages.po
呼び出しのたびに (つまり、すべての入力ソース ファイルで) 増え続ける既存の出力ファイルを読み取らなければならないため、さらに非効率的です。
これがWindows用のソリューションです。まず、gettext をインストールし、GnuWin32 ツール コレクションから検索します。
その後、次のコマンドを実行できます。
find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ;
コマンドを実行する前に出力ファイルが存在している必要があるため、新しい定義をマージできます。
これは、Mac での再帰検索で見つけた解決策です。
xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"`
サブフォルダーを含む、拡張子が php のファイルでメソッド gettext を使用するすべてのエントリを生成し、それらを translations/messages.pot に挿入します。