Menu do site em inglês com os menus: Home, Events, Who we are, Portfolio and Contact

ZF2: Navigation Menu com Tradução

Se você está fazendo seu site em múltiplos idiomas e usando o Navigation Menu para fazer o menu do seu site, mais cedo ou mais tarde você vai se perguntar: como eu traduzo as labels e os títulos do menu dentro do arquivo de configuração (module.config.php)?

Partirei do pré-suposto de que você já construiu seu menu usando o Navigation Menu e que os dados desse menu estão no arquivo module.config.php e a estrutura dele estão em alguma partial/helper chamada menu.phtml.

Veja abaixo como ficou o menu de um site  em que estou trabalhando. Ele está disponível em português e inglês.

Menu do site em português, com os ítens: Home, Eventos, Quem Somos, Portólio e Contato
Menu do site em português
Menu do site em inglês com os menus: Home, Events, Who we are, Portfolio and Contact
Menu do site em inglês

Para que qualquer conteúdo em module.config.php seja traduzido, você precisa fazer o seguinte:

      1. Antes do início do return array( …. instancie o objeto Translator:
        1
        2
        3
        4
        5
        6
        
        <?php 
        use Zend\I18n\Translator\Translator; // &lt;- Adicione essa linha
        /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ 
        $translator = new Translator(); //<- Instancie esse objeto
        return array( 'router' => array(
                'routes' => array( .....
      2. Ainda no module.config.php, na array navigation, onde você encontra as labels de seu menu, use o objeto instanciado e chame o método translate para traduzir a label. Veja abaixo um exemplo:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        
        'navigation'=&gt;array(
        	'default'=>array(
        		array(
                          'label'=><strong>$translator->translate('Home')</strong>,
        		  'route'=>'home',
        		  'params'=>array('lang'=&gt;'pt')
        		),
        		array(
                          'label'=><strong>$translator->translate('Eventos'),</strong>
                          'route'=>'eventos',
                          'params'=>array('lang'=>'pt'),
        		),
                        ...

Mas só fazer isso não adiantará. Embora o arquivo seja capturado pelo PoEdit e você consiga traduzi-lo, ao alterar o idioma do site os menus ainda ficarão no idioma original.  O que fazer então? A solução é bem simples.

Traduzir a partial/helper do menu

Na sua estrutura do menu (partial/helper), basta adicionar $this->translate() à impressão do título do menu. Veja o print abaixo para entender melhor.

Arquivo partials/menu.phtml

Menu Navigation

Basicamente, aonde havia $page->getLabel() coloquei $this->translate($page->getLabel()) e pronto. Agora seu menu deve funcionar com múltiplos idiomas.


Se gostou do post, se ele lhe ajudou de alguma forma, por favor, curta-o ou deixe um comentário. Dá um baita incentivo. Se tiver alguma dúvida, também estou à disposição.

 

Seus comentários são muito apreciados.