Plugin Multi Language Zend Framework 1 - Parte 2

Nessa segunda parte do tutorial vamos editar os plugins RouteDefault.php e Translate.php que tínhamos criado na primeira parte do tutorial, eles se encontram dentro da pasta application/plugins/

Editem esses arquivos com seu editor preferido e insiram os seguintes códigos...

RouteDefault.php


/**
 * Plugin de rotas para tradução
 * 
 * Defini a rota caso exista o parâmetro lang na url
 * 
 * O parâmetro lang será o primeiro parâmetro da url
 * exemplo endereco_do_site/lang/module/controller/action
 * 
 * @author Everson da Luz
 */
class Application_Plugin_RouteDefault extends Zend_Controller_Plugin_Abstract
{
   public function routeStartup(Zend_Controller_Request_Abstract $request) 
   {        
       // Resgata a url após o nome do servidor
       $uri = $_SERVER['REQUEST_URI'];
       // Explode a url
       $explode = explode('/', $uri);

       /**
        * Verifica o nome do servidor
        * caso seja um servidor local vai pegar a terceira parte do array
        * caso contrário pega a segunda
        */
       if ($_SERVER['HTTP_HOST'] == 'localhost') {
           $lang = $explode[2];
       } else {
           $lang = $explode[1]; 
       }

       // Obtem as linguas registradas
       $languages = Zend_Registry::get('languages');

       $front = Zend_Controller_Front::getInstance();
       $router = $front->getRouter();

       // Verifica se o parametro lang consta no array das linguagens
       if (in_array($lang, $languages)) {
           $routeLang = new Zend_Controller_Router_Route(
               ':lang/:module/:controller/:action/*',
               array(
                   'lang' => $lang == 'pt-br' ? 'pt_BR' : $lang,
                   'module' => $request->getModuleName(),
                   'controller' => $request->getControllerName(),
                   'action' => $request->getActionName()
               )
           );

           $router->addRoute('routeLang', $routeLang);
       }
   }
}

Resumindo, esse arquivo serve para montar a rota caso exista uma linguagem na url, se não existir a rota permanecerá normal.

Trasnlate.php


/**
 * Plugin de tradução
 * 
 * Defini e registra o caminho padrão para os arquivos de tradução
 * os arquivos devem estar no diretório /data/locales/
 * seguido por subdiretório com as iniciais de suas linguagens como pt_BR, en, es, etc.
 * 
 * Defini para todos os formulários da classe Zend_Form utilizarem o translate para as mensagens
 * 
 * Registra o tradutor para ser utitlizado em toda a aplicação
 * 
 * @author Everson da Luz
 */
class Application_Plugin_Translate extends Zend_Controller_Plugin_Abstract
{
   public function preDispatch(Zend_Controller_Request_Abstract $request)
   {
       // Obtem a linguagem
       $lang = $request->getParam('lang') == '' ? 'pt_BR' : $request->getParam('lang') ;
       // Registra a linguagem
       Zend_Registry::set('lang', $lang);
       // Defini a localidade
       $locale = new Zend_Locale($lang); 

       // Configura e carrega os arquivos de tradução da aplicação
       $translate = new Zend_Translate(array(
           'adapter' => 'array',
           'content' => APPLICATION_PATH . '/../data/locales/' . $lang . '/Translate.php',
           'locale' => $locale)
       );

       // Configura e carrega os arquivos de tradução de validação do ZEND
       $translate_msg = new Zend_Translate(array(
           'adapter' => 'array',
           'content' => APPLICATION_PATH . '/../data/locales/' . $lang . '/Zend_Validate.php',
           'locale' => $locale)
       );

       // Adiciona as traduções das mensagens do Zend_Validate
       $translate->addTranslation($translate_msg);
       // Defini para todos os formulários da classe Zend_Form utilizarem o translate para as mensagens
       Zend_Form::setDefaultTranslator($translate);
       // Registra o translate para ser usado em toda a aplicação
       Zend_Registry::set('Zend_Translate', $translate);
   }
}

Resumindo o arquivo Translate.php, é nele que registramos as traduções das línguas que se encontram no diretório /data/locale/. Ele resgata o parâmetro lang, e caso não exista uma lingua na url é definido o pt_BR como padrão, após isso registra o locale e as traduções, incluindo as traduções do Zend_Validate.

Com isso já está pronto o plugin, ele está registrado e pode ser usado em qualquer parte da aplicação, agora na última parte do tutorial vamos traduzir alguns conteúdos para demonstração. Confira as outras partes nos links a baixo:

Plugin multi language Zend Framework 1 - Parte 1

Plugin multi language Zend Framework 1 - Parte 2

Plugin multi language Zend Framework 1 - Parte 3

Voltar para o topo