Domanda

Come posso compilare un file utilizzando .po xgettext con i file PHP con un singolo comando in modo ricorsivo?

I miei file PHP esistono in una gerarchia, e il comando dritto xgettext non sembra scavare in modo ricorsivo.

È stato utile?

Soluzione

Capito:

find . -iname "*.php" | xargs xgettext

Stavo cercando di utilizzare -exec prima, ma che avrebbe eseguito un solo file alla volta. Questo li gira sul gruppo.

Google Yay!

Altri suggerimenti

Per la linea di comando di Windows una soluzione semplice è:

 @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

Ecco una soluzione per Windows. In un primo momento, installare gettext e trovare dalla collezione strumenti GnuWin32.

È possibile eseguire il seguente comando in seguito:

find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ;

Il file di output deve esistere prima di eseguire il comando, in modo che le nuove definizioni può essere fusa con esso.

Questa è la soluzione che ho trovato per la ricerca ricorsiva su Mac:

xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"`

Genera voci per tutti gli usi di metodo gettext in file la cui estensione è php, comprese le sottocartelle e li inserisce nelle traduzioni / messages.pot.

Non è possibile raggiungere questo obiettivo con un unico comando. L'opzione xgettext --files-from è tuo amico.

find . -name '*.php' >POTFILES
xgettext --files-from=POTFILES

Se si è certi che non si dispone di troppi file sorgente è anche possibile utilizzare find con xargs:

find . -name "*.php" -print0 | xargs -0 xgettext

Tuttavia, se si dispone di troppi file di origine, xargs richiamerà più volte xgettext in modo che la lunghezza massima della riga di comando della piattaforma non venga superata. Al fine di proteggere se stessi contro questo caso è necessario utilizzare l'opzione xgettext -j, --join-existing, rimuovere il file prima i messaggi stantii, e iniziare con uno vuoto in modo che xgettext non bail out:

rm -f messages.po
echo >messages.po
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing

Confronto che, con la semplice soluzione di data prima con l'elenco dei file di origine in POTFILES!

Uso find con --exec è molto inefficiente, perché richiamerà xgettext -j una volta per ogni file sorgente per la ricerca di stringhe traducibili. Nel caso particolare di xgettext -j è ancora più inefficiente perché xgettext deve leggere il file di output messages.po evergrowing esistente con ogni chiamata (cioè con ogni file sorgente di ingresso).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top