¿Cómo puedo compilar un archivo .po
usando xgettext con archivos PHP con un solo comando de forma recursiva?xgettext Recusive?
Mis archivos PHP existen en una jerarquía, y el comando xgettext
directo no parece cavar de forma recursiva.
¿Cómo puedo compilar un archivo .po
usando xgettext con archivos PHP con un solo comando de forma recursiva?xgettext Recusive?
Mis archivos PHP existen en una jerarquía, y el comando xgettext
directo no parece cavar de forma recursiva.
¡Gracias:
find . -iname "*.php" | xargs xgettext
yo estaba tratando de utilizar -exec
antes, pero que sólo correría un archivo a la vez. Esto los ejecuta en el grupo.
Yay Google!
Aquí hay una solución para Windows. Al principio, instale gettext y find desde la colección de herramientas GnuWin32.
Puede ejecutar el siguiente comando después:
find /source/directory -iname "*.php" -exec xgettext -j -o /output/directory/messages.pot {} ;
El archivo de salida tiene que existir antes de ejecutando el comando, para que las nuevas definiciones puedan fusionarse con él.
¿Quizás instalando y usando Cygwin? Sé que no es una solución nativa, pero debería obtener el mismo resultado. – neezer
Para la línea de comandos de Windows una solución simpe es:
@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
Algunas advertencias por si acaso: 'pygettext.py' no admite la opción' -f'. – Morwenn
Esta es la solución que encontré para la búsqueda recursiva en Mac:
xgettext -o translations/messages.pot --keyword=gettext `find . -name "*.php"`
Genera entradas para todos los usos de gettext método en archivos cuyos la extensión es php, incluidas las subcarpetas y las inserta en translations/messages.pot.
Deje un pequeño texto descriptivo –
No puede lograr esto con un solo comando. La opción xgettext --files-from
es tu amiga.
find . -name '*.php' >POTFILES
xgettext --files-from=POTFILES
Si está seguro de que usted no tiene demasiados archivos de origen también se puede utilizar find
con xargs
:
find . -name "*.php" -print0 | xargs -0 xgettext
Sin embargo, si usted tiene demasiados archivos de origen, xargs
invocará xgettext
múltiple veces para que no se exceda la longitud máxima de línea de comando de su plataforma. Con el fin de protegerse contra ese caso, usted tiene que utilizar la opción xgettext -j
, --join-existing
, eliminar archivo en primer lugar los mensajes obsoletos, y comenzar con una vacía para que xgettext no rescata a:
rm -f messages.po
echo >messages.po
find . -name "*.php" -print0 | xargs -0 xgettext --join-existing
compararlo con la solución simple dada primero con la lista de archivos fuente en POTFILES
!
Usar find
con --exec
es muy ineficiente porque invocará xgettext -j
una vez por cada archivo fuente para buscar cadenas traducibles.En el caso particular de xgettext -j
, es incluso más ineficiente porque xgettext tiene que leer el archivo de salida existentecon cada invocación (es decir, con cada archivo fuente de entrada).
Bueno, no funciona para mí, pero me mostró una forma de posibilidad de lo contrario sería aceptada y viviría con ella como si no hubiera mejor manera de que este –
Hola, buen trabajo, pero se preocupó por agregar -j al final de el comando, a menos que no funcione – Ata
Esto es incorrecto, porque si hay demasiados archivos para caber en una línea de comandos, xargs ejecutará xgettext varias veces, provocando que las invocaciones anteriores sean destruidas. Solo agregar -j tampoco es correcto, ya que primero debe eliminar el archivo o se unirá a los datos anteriores. –