Olá pessoal! Se você veio até meu blog neste post é porque provavelmente você está se perguntando: como posso usar o método translator do Zend Framework 2 em um controller?
Isso porque como você já deve ter percebido, translators só funcionam “nativamente” em views. Nelas basta você colocar o método e o atributo do método é a mensagem que você deseja traduzir (tal como: $this->translator(“Mensagem a ser traduzida”). Mas as vezes há mensagens no próprio controller que devem ser traduzidas. Como fazer isso?
Fuçando na web encontrei no bom e velho StackOverflow a mesma pergunta feita por mim. E o usuário Jurian deu a solução (http://stackoverflow.com/questions/14261115/zf2-use-translator-in-controller) . Vou explicar a solução abaixo.
O translator é um objeto e é injetado (por injection) em uma view helper. Sendo assim você pode tranquilamente utiliza-lo na view melo método que mostrei acima. Assumindo que você possui seu módulo com configurações baseadas na Skeleton Application, que é o padrão de um projeto ZF2 é que darei a resposta.
Assim como o translator já está injetado nas views helpers, o melhor modo de usarmos o translator em determinados controllers é por injetarmos ele também dentro do seu controller. Então, dentro do arquivo module.config.php de seu módulo PHP onde desejas colocar o método tranlsate(“Mensagem…”), adicione no atributo controllers da array principal o seguinte código:
PRIMEIRA MANEIRA
array(
//Adicione a seguinte factory
'factories' => array(
'meuController' => function($sm) {
$translator = $sm->getServiceLocator()->get('translator');
$controller = new MeuMódulo\Controller\MeuController($translator);
}
)
)
...
?>
Daí, no Controller mesmo você deve fazer um método construtor para injetar o serviço de tradução:
translator = $translator;
}
}
?>
Agora é só usar, dentro de qualquer método dessa classe (ou seja, desse controller), o método translate da seguinte forma: $this->translator->translate(“FRASE A SER TRADUZIDA”);
SEGUNDA MANEIRA
Há também uma segunda maneira, bem mais fácil. Basta usarmos o serviceLocator ($this->getServiceLocator()) no próprio método e pegarmos o serviço do translator. Veja como é bem fácil:
No método/action do controller que você deseja utilizar o translator acrescente um código tal como esse:
getServiceLocator ()->get ( 'translator' );
//Utilize o método translate que vem do serviço translator que já está na variável de mesmo nome
$tituloPagina = $translator->translate ( "Mensagem a Traduzir" );
}
...
?>
Espero ter ajudado!