Come posso compilare un file .po
usando xgettext con file PHP con un singolo comando in modo ricorsivo?Recusive xgettext?
I file PHP sono presenti in una gerarchia e il comando diretto xgettext
non sembra scorrere in modo ricorsivo.
Come posso compilare un file .po
usando xgettext con file PHP con un singolo comando in modo ricorsivo?Recusive xgettext?
I file PHP sono presenti in una gerarchia e il comando diretto xgettext
non sembra scorrere in modo ricorsivo.
capito:
find . -iname "*.php" | xargs xgettext
stavo cercando di usare -exec
prima, ma che avrebbe eseguito un solo file alla volta. Questo li gestisce sul gruppo.
Yay Google!
Ecco una soluzione per Windows. Inizialmente, installa gettext e trova dalla raccolta di strumenti di 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 eseguendo il comando, così le nuove definizioni possono essere unite con esso.
Forse installando e usando Cygwin? So che non è una soluzione nativa, ma dovrebbe ottenere lo stesso risultato. – neezer
Per la linea di comando di Windows una soluzione 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
Alcuni avvertimenti nel caso in cui: 'pygettext.py' non supporta l'opzione' -f'. – Morwenn
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 nel file i cui l'estensione è php, incluse le sottocartelle e le inserisce in translation/messages.pot.
Lascia un piccolo testo descrittivo –
Non è possibile ottenere questo con un singolo comando. L'opzione xgettext --files-from
è tua amica.
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
sarà invocare xgettext
multipla volte 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
Confronti che, con la soluzione semplice fornita prima con l'elenco dei file sorgente in POTFILES
!
L'utilizzo di find
con --exec
è molto inefficace perché invocherà xgettext -j
una volta per ogni file sorgente per cercare stringhe traducibili.Nel caso particolare di xgettext -j
è ancora più inefficiente perché xgettext deve leggere il file di output esistente sempre crescente messages.po
con ogni chiamata (cioè con ogni file sorgente di input).
beh non funziona per me, ma mi hai mostrato un modo per la possibilità altrimenti sarebbe accettato e vivere con esso come se non ci fosse modo migliore che questo –
Ciao, buon lavoro, ma è necessario aggiungere -j alla fine di il comando, a meno che non funzioni – Ata
Questo è sbagliato, perché se ci sono troppi file per adattarsi a una linea di comando, xargs eseguirà xgettext più volte, causando il bombardamento delle invocazioni precedenti. Anche l'aggiunta di -j non è corretta, poiché è necessario eliminare prima il file o ci si unirà ai vecchi dati. –