Internacionalizando Aplicações baseadas no CakePHP 1.2

Filed Under (PHP, Software Livre | ) by Thiago on 04-10-2007

Em primeiro lugar, este manual é inteiramente baseado “p28n, the top to bottom persistent internationalization tutorial.” de Jason Chow, então, o que vou citar aqui, são os passos que utilizei para “internacionalizar” uma pequena aplicação que escrevi para um cliente.

Primeiramente, adicionamos a seguinte linha em nosso config/bootstrap.php:

define(’DEFAULT_LANGUAGE’, ‘pt-br’);

….

?>

Com isso, definimos a linguagem padrão, para o português.

Agora, ao contrário do que o artigo indica, eu adicionei somente a linha abaixo no config/routes.php:

// rota para troca de idioma

$Route->connect(’/lang/*’, array(’controller’ => ‘p28n’, ‘action’ => ‘change’));

Agora, para podermos trocar de idioma, é criamos um link ou redirecionamento para “/lang/idiomaDesejado”, que o controlador p28n irá tratar, mas anes disso, vamos criar o componente P28n, e salve no diretório controllers/components da sua aplicação, copie o código abaixo:

Session->check('Config.language') ) {
$this->change(($this->Cookie->ad('lang') ? $this->Cookie->read('lang') : DEFAULT_LANGUAGE));
}
}

function change($lang = null) {
if ( !empty($lang) ) {
$this->Session->write('Config.language', $lang);
$this->Cookie->write('lang', $lang);
}
}
}

// fim da calsse

Reparou que eu não botei a tag de fechamento do PHP? Posé, deixa assim mesmo, fechando, o script acusa um erro no envio dos headers e a bagaça não anda mesmo, então, pode deixar… Seguindo o mesmo estilo - não fechando a tag do PHP, criamos o controlador que comentamos agora pouco, copie o código abaixo, e salve com o nome de p28n_controller.php, no diretório controllers da aplicação.

P28n->change($lang);

$this->redirect($this->referer(null, true));
}

function shuntRequest() {
$this->P28n->change($this->params['lang']);

$args = func_get_args();
$this->redirect("/" . implode("/", $args));
}
}
// fim

Agora vamos adicionar a seguinte linha no arquivo “app_controller.php”

var $components = array (’P28n’);

Isso fará com que o componente P28n, que você criou anteriormente, seja utilizado por toda a aplicação.

Agora, com tudo instalado e funcionando, vamos testar, pegue algum arquivo da sua aplicação (em views ou mesmo em controllers), qualquer lugar que gere uma mensagem de retorno para o usuário, vamos usar como exemplo a linha abaixo:

echo “Bem vindo”;

..

E trocamos para:

echo __(”Bem vindo”);

Entendeu? Todas as mensagens você põe agora entre __(), se você for utilizar a mensagem como retorno (e não diretamente como echo), coloque o parametro “true”, ficando assim:

$msg = __(”Bem vindo”, true);

Feito isso para todas as mensagens da aplicação, vamos gerar o arquivo de tradução, na shell, crie os diretórios das linguagens:

$ cd aplicacao

$ mkdir -p locale/pt_br/LC_MESSAGES

$ mkdir -p locale/eng/LC_MESSAGES

Diretórios criados, vamos gerar o arquivo com as strings a serem traduzidas:

$ cd aplicacao

$ ../cake/console/cake extract -project aplicacao

Então, ele irá fazer algumas perguntas, na sequência:

Hello thiago,

Welcome to CakePHP v1.2.0.5427 alpha Console
---------------------------------------------------------------
App : aplicacao
Path: /var/www/apliacao
---------------------------------------------------------------

Extracting...
---------------------------------------------------------------
Path: /var/www/aplicacao
Output Directory: /var/www/aplicacao/locale/
---------------------------------------------------------------
Would you like to merge all translations into one file? (y/n) [y] > y
What should we name this file?  [default] >
Processing /var/www/aplicacao/app_controller.php......

Pronto, foi criado um arquivo chamado “default.pot”, no diretório locale que criamos, copie-o, para os diretório LC_MESSAGES do idioma, trocando a extensão de “.pot” para “.po”

$ cd aplicacao/locale

$ cp default.pot pt_br/LC_MESSAGES/default.po

$ cp default.pot eng/LC_MESSAGES/default.po

A estrutura do arquivo é bem simples, algo como:

....
#: /controllers/contato_controller.php:16;55msgid "Bem vindo"msgstr ""
....

O processo de tradução, é simples, bastando inserir a tradução da mensagem em “msgid” em “msgstr”,

....
#: /controllers/teste_controller.php:16;55 msgid "Bem vindo" msgstr "Welcome"
....

Viu? Fácil não? Traduza suas strings, e acesse alterne entre os links “/lang/pt_br” e “/lang/eng” da sua aplicação.

;)

Batizados

Filed Under (Capoeira | ) by Thiago on 04-10-2007

Logo da ABADA
ABADA-Capoeira
Os dias tão corridos, aos poucos estou finalizando minhas tarefas pendentes, mas agora, to bem centrado para o batizado da capoeira, que vai acontecer por esses dias (nesse final de semana tem um, depois coloco aqui o calendário dos eventos).

Final de semana, foi batizado das crianças do Professor Piriquito Verde , em Curitiba, foi muito bom, as crianças jogaram demais e o evento foi muito bem organizado. De quebra, conheci o Mestrando Charm, que de cara me deu um apelido hehehe, agora é só esperar o meu batizado, dia 26 agora.

O site da ABADA-Capoeira do pessoal aqui do Sul já tá no forno, pelos próximos dias, já estarei disponibilizando um preview para o pessoal, aguardem!

ads
ads
ads
ads