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