ZF2 :: Como utilizar o translator em um controller

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.

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!

CategoriasSem categoria

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.