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.

War es hilfreich?

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.

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top