segunda-feira, 5 de setembro de 2011

Internacionalização com zend framework

As fronteiras da minha linguagem são as fronteiras do meu universo - Ludwig Wittegenstein


Para a tecnologia não existem fronteiras... Isso é o que dizem não é? Mas como realmente ligamos outras culturas? Como pode ser tão simples essa nossa comunicação com o mundo? Opa, olha ai a palavra... COMUNICAÇÃO


A comunicação humana é um processo que envolve a troca de informações, e utiliza os sistemas simbólicos como suporte para este fim. Estão envolvidos neste processo uma infinidade de maneiras de se comunicar: duas pessoas tendo uma conversa face-a-face, ou através de gestos com as mãos, mensagens enviadas utilizando a rede global de telecomunicações, a fala, a escrita que permitem interagir com as outras pessoas e efetuar algum tipo de troca informacional.



Ai está e o nosso mundo se desenvolve quando tornamos essa comunicação acessível, quando tornamos essa comunicação INTERNACIONAL, e é por isso que precisamos criar aplicações que 'sejam poliglotas' e o ZEND FRAMEWORK esta pronto para esse mundo.

A internacionalização do ZF é muito maior do que meu simples artigo mas a idéia aqui é entender como efetuar essa tradução e por isso não vou falar sobre localizar o idioma do usuário(isso fica para outro post) pois vou mostrar como efetivar a tradução.



Zend_Translate

O Zend_Translate manipula diversos adaptadores para tradução, os adaptadores são exatamente a forma como vamos trabalhar com a tradução os disponíveis são:
Array, Tbx, Xliff, Csv, Tmx , XmlTm, Gettext, Qt entre outros...





Exemplo de utilização de um adaptador:

  1. $translate = new Zend_Translate(
  2.     array(
  3.         'adapter' => 'gettext',
  4.         'content' => '/meu/diretorio/source-de.mo',
  5.         'locale'  => 'de'
  6.     )
  7. );
  8. $translate->addTranslation(
  9.     array(
  10.         'content' => '/pasta/da/tradu/fr-source.mo',
  11.         'locale'  => 'fr'
  12.     )
  13. );
  14. print $translate->_("Exemplo") . "\n";
  15. print "=======\n";
  16. print $translate->_("Traduzido em de") . "\n";
  17. print "\n";
  18. $translate->setLocale('fr');
  19. print $translate->_("Agora em fr") . "\n";
Esse é um exemplo da própria documentação do ZF utilizando gettext mas agora vamos montar um básico utilizando array que tal?


No projeto que ando trabalhando utilizo array pois os formulários são criados dinamicamente, sendo assim os dados são de acordo com os campos do banco de dados exemplo (usu_nome é o campo nome da tabela usuario) e assim ficaria na tela mas utilizando a internacionalização facilitamos a geração dinâmica de formulários e ainda colocamos os nomes de forma correta com classe de maneira que traduzo os prefixos para uma forma legível e em diversas linguas, veja um exemplo simples da utilização (vou colocar tudo no mesmo diretório.





Exemplo simples:
  1. public function internacionalAction()
  2. {
  3. $pt = array(
  4. 'hi' => 'oi',
  5. 'need'  => 'preciso',
  6. 'my'  => 'meu',
  7. 'friend'  => 'amigo',
  8. );
  9. $tradutor = new Zend_Translate('array',$pt);

  10. $palavra = "need";
  11. echo $tradutor->_($palavra);
  12. exit;
  13. }


Nesse exemplo eu criei o $tradutor passando para ele o adaptador do tipo array e o próprio array ($pt) assim exibi simplesmente na tela do dado que percorreu até o indice e fez a conversão...


Como eu já disse o conceito de internacionalização do ZF é muito completo e não algo 'engessado' como mostrei mas o conceito de uso é esse. vcs percebem ainda que escrevi tudo em um action e dei um exit no final isso foi justamente para eu poder ver a tradução saindo na tela sem precisar ir para a view.


Encontrei um Blog de um cara muito experiênte em ZF chamado Marcos Borges e caso você queira algo avançado sobe o ZT veja aqui.


Nos próximos POSTs continuo com coisas sobre ZF













2 comentários:

  1. Nossa mano vc é meio maluco... que post de doido... TU MANJA PRA PORRA... consegui fazer com array e tornei meu app internacional agora o esquema de gerar form dinâmicos ai ja é muita maluquice pra mim =[

    ResponderExcluir
  2. Gostei do blog que tu indicou..

    ResponderExcluir