質問
どうすればコンパイルできますか .po
1つのコマンドを使用してPHPファイルを使用してxgetTextを使用してファイルを再帰的にファイルしますか?
私のPHPファイルは階層に存在し、ストレート xgettext
コマンドは再帰的に掘り下げていないようです。
解決
とった:
find . -iname "*.php" | xargs xgettext
私は使用しようとしていました -exec
以前は、それは一度に1つのファイルのみを実行するだけでした。これにより、それらは束に合わせて実行されます。
Yay Google!
他のヒント
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
これがWindowsのソリューションです。最初は、getTextをインストールし、GNUWIN32ツールコレクションから検索します。
- http://gnuwin32.sourceforge.net/packages/getText.htm
- gnuwin32.sourceforge.net/packages/findutils.htm
その後、次のコマンドを実行できます。
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のすべての使用のエントリを生成し、翻訳/message.potに挿入します。
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
と --exec
呼び出されるため、非常に非効率的です xgettext -j
すべてのソースファイルが翻訳可能な文字列を検索するには一度。の特定の場合 xgettext -j
XgetTextは、成長している既存の出力ファイルを読み取る必要があるため、さらに非効率的です messages.po
すべての呼び出しで(それはすべての入力ソースファイルを使用します)。