Frage
Wie kann ich a kompilieren .po
Datei mit XGettext mit PHP -Dateien mit einem einzelnen Befehl rekursiv?
Meine PHP -Dateien existieren in einer Hierarchie und in der Straße xgettext
Der Befehl scheint nicht rekursiv zu graben.
Lösung
Ich habs:
find . -iname "*.php" | xargs xgettext
Ich habe versucht zu benutzen -exec
Vorher, aber das würde jeweils nur eine Datei ausführen. Das leitet sie auf dem Haufen.
Yay Google!
Andere Tipps
Für Windows -Befehlszeile lautet eine SIMPE -Lösung:
@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
Hier ist eine Lösung für Windows. Installieren Sie zuerst GetText und finden Sie aus der Gnuwin32 -Tools -Sammlung.
- http://gnuwin32.sourceforge.net/packages/getText.htm
- gnuwin32.Sourceforge.net/packages/findutils.htm
Sie können den folgenden Befehl danach ausführen:
find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ;
Die Ausgabedatei muss vor dem Ausführen des Befehls vorhanden sein, sodass die neuen Definitionen damit zusammengeführt werden können.
Dies ist die Lösung, die ich für eine rekursive Suche auf Mac gefunden habe:
xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"`
Generiert Einträge für alle Verwendungen von Methode GetText in Dateien, deren Erweiterung PHP ist, einschließlich Unterordnern, und fügt sie in Übersetzungen/Nachrichten ein.
Sie können dies mit einem einzigen Befehl nicht erreichen. Die XGettext -Option --files-from
ist dein Freund.
find . -name '*.php' >POTFILES
xgettext --files-from=POTFILES
Wenn Sie sicher sind, dass Sie nicht zu viele Quelldateien haben, können Sie auch verwenden find
mit xargs
:
find . -name "*.php" -print0 | xargs -0 xgettext
Wenn Sie jedoch zu viele Quelldateien haben, xargs
wird aufrufen xgettext
Mehrmals, so dass die maximale Befehlszeilenlänge Ihrer Plattform nicht überschritten wird. Um sich vor diesem Fall zu schützen, müssen Sie die XGettext -Option verwenden -j
, --join-existing
, Entfernen Sie zuerst die veraltete Nachrichtendatei und starten Sie mit einem leeren, damit XgetText nicht rettet:
rm -f messages.po
echo >messages.po
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing
Vergleichen Sie diese mit der einfachen Lösung, die zuerst mit der Liste der Quelldateien in angegeben ist POTFILES
!
Verwendung find
mit --exec
ist sehr ineffizient, weil es aufrufen wird xgettext -j
einmal für jede Quelldatei, um nach übersetzbaren Zeichenfolgen zu suchen. Im speziellen Fall von xgettext -j
Es ist noch ineffizienter, da XGETText die immer gewachsene vorhandene Ausgabedatei lesen muss messages.po
mit jedem Aufruf (dh mit jeder Eingabemellendatei).