Vou demostrar como fazer um plugin de multi language para Zend Framework 1. Funcionará da seguinte maneira... será colocado o valor da linguagem antes do nome do modulo na url...
www.site.com/pt_BR/module/controller/action
E a aplicação irá traduzir o conteúdo conforme esse valor, caso o valor seja en, o conteúdo será em inglês, para es será em espanhol, e assim para qualquer linguagem que queira utilizar.
Primeiramente vou demostrar a estrutura básica de pastas que utilizei...
É uma estrutura padrão como recomenda a própria Zend, conforme o link http://framework.zend.com/manual/1.12/en/project-structure.project.html
E como na imagem a cima os arquivos de tradução que usaremos estará no diretório /data/locales/, e dentro de locales irá conter diversos diretórios com as siglas das linguagens, por exemplo en - es - pt_BR, etc... Usaremos exatamente essas três para demostrar o plugin e seu funcionamento.
Crie os diretório en, es e pt_BR dentro de /data/locales/ e dentro de cada uma crie um arquivo chamado Translate.php, por enquanto deixe-o vazio.
Dentro de cada diretório das linguagens coloque os arquivos de tradução do Zend_Validate que são as mensagens de validação que a classe Zend_Form utiliza, por padrão a linguagem é inglês.
Você pode conseguir esses arquivos dentro da pasta do Zend Framework 1 quando você faz o download no site oficial, esses arquivos estão em /resources/languages/ e dentro desse diretório também consta vários diretórios com as siglas das linguagens, procure o diretório en, es e pt, copie de cada uma o arquivo Zend_Validation.php e cole nos seus respectivos diretório na sua aplicação.
Sua aplicação deverá estar assim até o momento...
Após isso crie um diretório dentro de application chamado plugins, nesse diretório estará nosso plugin de tradução. Você deverá criar os seguintes arquivos dentro de plugins, RouteDefault.php e Translate.php
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)
{
}
}
Translate.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)
{
}
}
Após isso em seu bootstrap da aplicação você deverá registrar esses plugins com o seguinte código...
Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* Registra as linguas da aplicação
* de acordo com os nomes dos diretórios dentro do diretório /data/locales/
*/
protected function _initRegistersLangs()
{
// Obtém o nome dos diretório dentro diretório locales
$languages = scandir(APPLICATION_PATH . '/../data/locales/');
// Remove os indices com pontos de voltar
foreach ($languages as $key => $lang) {
if ($lang == '.' || $lang == '..') {
unset($languages[$key]);
}
}
// Registra o array com as siglas das linguagens
Zend_Registry::set('languages', $languages);
}
/**
* Registra o plugin de rotas para as linguagens
*/
protected function _initRouteDefault()
{
$front = Zend_Controller_Front::getInstance();
// Registra um plugin
$front->registerPlugin(new Application_Plugin_RouteDefault());
}
/**
* Registra o plugin Translate
*/
protected function _initTranslate()
{
$front = Zend_Controller_Front::getInstance();
// Registra um plugin
$front->registerPlugin(new Application_Plugin_Translate());
}
}
O método _initRegistersLangs(), irá scanear o diretório /data/locales/ e irá pegar todos os nomes dos diretórios que contém lá, e transformará em um array. Depois removemos os pontos que consta junto do array, e por último registramos esse array com o Zend_Register para poder ser utilizado em toda a aplicação. Sua estrutura de pastas final ficará assim...
Com isso terminamos a primeira parte do tutorial. Confira as outras partes nos links a baixo.
Plugin multi language Zend Framework 1 - Parte 1