Wie kann ich eine .po
Datei mit Xgettext mit PHP-Dateien mit einem einzigen Befehl rekursiv kompilieren?Wiederkehrender xgettext?
Meine PHP-Dateien existieren in einer Hierarchie, und der gerade xgettext
Befehl scheint nicht rekursiv zu graben.
Wie kann ich eine .po
Datei mit Xgettext mit PHP-Dateien mit einem einzigen Befehl rekursiv kompilieren?Wiederkehrender xgettext?
Meine PHP-Dateien existieren in einer Hierarchie, und der gerade xgettext
Befehl scheint nicht rekursiv zu graben.
Verstanden:
find . -iname "*.php" | xargs xgettext
ich versuche -exec
vor, zu verwenden, aber das wäre nur eine Datei zu einem Zeitpunkt ausgeführt. Dies führt sie auf dem Haufen.
Yay Google!
Hier ist eine Lösung für Windows. Installieren Sie zunächst gettext und suchen Sie in der GnuWin32 Tools-Sammlung.
Sie können anschließend den folgenden Befehl ausführen:
find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ;
Die Ausgabedatei vor existieren muss Ausführen des Befehls, damit die neuen Definitionen mit ihm zusammengeführt werden können.
Vielleicht Cygwin installieren und verwenden? Ich weiß, dass es keine native Lösung ist, aber Sie sollten das gleiche Ergebnis erzielen. – neezer
Für Windows-Befehlszeile ein simpe Lösung ist:
@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
Einige Warnung nur für den Fall: 'pygettext.py' unterstützt die Option' -f' nicht. – Morwenn
Dies ist die Lösung, die ich für rekursive Suche auf Mac gefunden:
xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"`
Erzeugt Einträge für alle Anwendungen von Verfahren gettext in Dateien, deren Erweiterung ist PHP, einschließlich Unterordner und fügt sie in Übersetzungen/messages.pot.
Hinterlassen Sie einen kleinen beschreibenden Text –
Sie können dies nicht mit einem einzigen Befehl 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 Sie auch find
mit xargs
verwenden können:
find . -name "*.php" -print0 | xargs -0 xgettext
Wenn Sie jedoch zu viele Quelldateien haben, werden xargs
xgettext
mehrere aufrufen Zeiten, damit die maximale Befehlszeilenlänge Ihrer Plattform nicht überschritten wird. Um sich gegen diesen Fall zu schützen, haben Sie die xgettext Option verwenden -j
, --join-existing
, entfernen Sie die veralteten Nachrichten zuerst, Datei und mit einer leeren beginnen, damit xgettext schließt nicht aus der Patsche helfen:
rm -f messages.po
echo >messages.po
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing
Vergleichen Sie das mit die einfache Lösung zuerst mit der Liste der Quelldateien in POTFILES
gegeben!
Die Verwendung von find
mit --exec
ist sehr ineffizient, da xgettext -j
einmal für jede Quelldatei aufgerufen wird, um nach übersetzbaren Strings zu suchen.In dem speziellen Fall von xgettext -j
ist es noch ineffizienter, weil xgettext die ständig wachsende Ausgabedatei messages.po
mit jedem Aufruf lesen muss (das heißt mit jeder Eingabequelldatei).
gut es funktioniert nicht für mich, aber Sie zeigten mir einen Weg für die Möglichkeit, sonst würde akzeptiert werden und damit leben, als ob es keinen besseren Weg gibt, dass diese –
Hallo, Nette Arbeit, aber vorsichtig zu -J am Ende hinzufügen der Befehl, es sei denn, es funktioniert nicht – Ata
Das ist falsch, weil, wenn es zu viele Dateien gibt, um auf eine Befehlszeile zu passen, xargs xgettext mehrere Male ausführen wird, wodurch die früheren Aufrufe verfälscht werden. Auch das Hinzufügen von -j ist nicht richtig, da Sie zuerst die Datei löschen müssen oder Sie sich den alten Daten anschließen. –