ZF2 :: Como alterar dinamicamente o idioma do seu site

Se você está desenvolvendo o seu site em ZendFramework 2 e colocou corretamente o método $this->translator(“PALAVRA”) para todas as strings de sua view que desejavas que fossem traduzidas você deve estar se perguntando: como eu faço para que a página mude para o idioma?

Bom, primeiramente você já deve ter alterado os arquivos do idioma que quer que o site seja traduzido na pasta language de seu módulo (veja a estrutura abaixo para o módulo Paginas).

Estrutura de pastas do módulo

O que você precisa agora é que, dinamicamente, no arquivo module.config.php do seu módulo sejam alterados as informações de idioma. O arquivo de tradução que é pego está no atributo “locale” da minha array (veja o print abaixo). O valor para esse atributo por padrão é o “en_US”, mas eu já setei para “pt”. Sendo assim, por padrão a página será aberta usando o arquivo de tradução pt.po, contido na pasta “language“.

Print do Serviço Translator contido no arquivo module.config.php com destaque para a configuração de local.
Print do Serviço Translator contido no arquivo module.config.php com destaque para a configuração de local.

Digamos que você esteja em uma página em português e daí queira acessar a mesma página em inglês. Não há como alterar dinamicamente o arquivo module.config.php ao mudar o idioma. Porém, há uma solução muito simples e fácil.

A Solução

Imagino que seja no seu Controller que você receba as informações sobre o que está sendo acessado (quer o id do registro quer a slug) e o idioma desse conteúdo. O que você deve fazer é simplesmente usar o getServiceLocator e puxar o serviço de tradução, alterando o local. Faça o seguinte:

getServiceLocator()->get('translator');
$translator->setLocale("en"); //Ou coloque a variável da slug do idioma
//FIM DA ALTERAÇÃO DE IDIOMA
?>

 

Veja como eu fiz uma action de um controller com alteração  de idioma:

Nesse método exibo um formulário com conteúdo em diversos idiomas em determinada view. As informações em idiomas diferentes vem do banco de dados. Pego como parâmetro a slug do idoma e a slug do conteúdo, ambos passados através da URL (valendo-me das rotas). Após isso, verifico a existência tanto do idioma quanto do referido conteúdo nesse idioma. Se existir o conteúdo no idioma solicitado, altera o "locale", valendo-me do setLocale, para a slug do idioma requisitado. O sistema acessará assim o arquivo .po na pasta language que possua o mesmo nome da slug do idioma (exemplo: meusite.com.br/pt). Com isso, qualquer formulário que eu tenha traduzido nos arquivos da pasta language será também traduzido.
Nesse método exibo um formulário com conteúdo em diversos idiomas em determinada view. As informações em idiomas diferentes vem do banco de dados. Pego como parâmetro a slug do idoma e a slug do conteúdo, ambos passados através da URL (valendo-me das rotas). Após isso, verifico a existência tanto do idioma quanto do referido conteúdo nesse idioma. Se existir o conteúdo no idioma solicitado, altera o “locale”, valendo-me do setLocale, para a slug do idioma requisitado. O sistema acessará assim o arquivo .po na pasta language que possua o mesmo nome da slug do idioma (exemplo: meusite.com.br/pt). Com isso, qualquer formulário que eu tenha traduzido nos arquivos da pasta language será também traduzido.

 

Se não expliquei direito, pode perguntar. Espero ajudar.

 

CategoriasSem categoria

Deixe um comentário

O seu endereço de e-mail não será publicado.

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