Pergunta

Como posso compilar um .po Arquivo usando XGetText com arquivos PHP com um único comando recursivamente?

Meus arquivos PHP existem em uma hierarquia e o reto xgettext O comando não parece cavar recursivamente.

Foi útil?

Solução

Entendi:

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

Eu estava tentando usar -exec Antes, mas isso executaria apenas um arquivo por vez. Isso os executa no grupo.

Yay Google!

Outras dicas

Para a linha de comando do Windows, uma solução 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

Aqui está uma solução para o Windows. No início, instale o GetText e encontre na coleção GNUWIN32 Tools.

Você pode executar o seguinte comando depois:

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

O arquivo de saída deve existir antes da execução do comando, para que as novas definições possam ser mescladas com ele.

Esta é a solução que encontrei para pesquisa recursiva no Mac:

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

Gera entradas para todos os usos do método getText em arquivos cuja extensão é PHP, incluindo subpastas e insere -os em traduções/mensagens.pot.

Você não pode conseguir isso com um único comando. A opção XGETTEXT --files-from é seu amigo.

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

Se você tem certeza de que não tem muitos arquivos de origem, também pode usar find com xargs:

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

No entanto, se você tiver muitos arquivos de origem, xargs irá invocar xgettext várias vezes para que o comprimento máximo da linha de comando da sua plataforma não seja excedido. Para se proteger contra esse caso, você deve usar a opção XGetText -j, --join-existing, remova o arquivo de mensagens obsoletas primeiro e comece com um vazio para que o XGetText não resgate:

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

Compare isso com a solução simples fornecida primeiro com a lista de arquivos de origem em POTFILES!

Usando find com --exec é muito ineficiente porque invocará xgettext -j uma vez para cada arquivo de origem pesquisar strings traduzíveis. No caso particular de xgettext -j É ainda mais ineficiente porque o XGetText precisa ler o eterno arquivo de saída existente messages.po com cada invocação (ou seja, com cada arquivo de origem de entrada).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top