Olá pessoal!
Ao preparar o site que estou trabalhando para a tradução me deparei com um problema. Como traduzir a label de um form? Sim porque se eu quisesse traduzir qualquer coisa em uma view no ZendFramework2 é muito fácil. Basta apenas colocar $this->translate(“FRASE A TRADUZIR”) e o Poedit encontrará o termo que deve ser traduzido.
Há, porém, um problema. Se estou trabalhando com a construção de formulários através de uma classe específica de formulários tal como ContatoForm.php (ex.: Contato->Form->ContatoForm.php) e defino as labels da seguinte forma: $fm_nome->setLabel(“Nome*:”); não posso simplesmente fazer $fm_nome->setLabel($this->translate(“Nome*:”)); Se eu tentar fazer isso ocorrerá um erro.
Então, qual seria a solução? Por padrão, sem que haja o $this->translate(“STRING”), o Poedit não reconhece que trata-se de uma string para tradução. Procurei em tudo que é blog internacional e a maioria possuía soluções um tanto que complexas. Foi então que resolvi investigar como funcionava o Poedit. E descobri uma solução simples!
A solução é configurar o Poedit para reconhecer que os conteúdos contidos no $objeto->setLabel(“NOME DA LABEL”). Assim, o Poedit recuperará os dados contidos em todos os ->setLabel e puxará para o arquivo de tradução. Então, como fazer a correta configuração?
Configurando o Poedit
1. Já no arquivo de tradução .po, clique no menu Catálogo->Propriedades;
2. Uma janela como a abaixo aparecerá. Escolha a aba “Palavras-chave do código” e em seguida clique no botão pontilhado para inserir uma nova palavra chave. Note que a palavra chave padrão é “translate“. Isso significa que qualquer método no seu código que seja pura e simplesmente “translate” é pego como base para traduzir a palavra que encontra-se dentro dele. É por isso que o $this->translate(“PALAVRA”) funciona!
3. Agora basta adicionar o método setLabel à lista de palavras-chave adicionais. Assim, ele irá varrer os arquivos do módulo onde encontra-se o arquivo de tradução procurando por algum método com o nome setLabel e utilizar o primeiro parâmetro passado como string a ser traduzida.
Agora basta atualizar o documento. Espero que tenha ajudado.
William, sensacional! Didático, simples e funcional! Obrigado.