Uma das grandes vantagens de utilizar um framework profissional é que você não precisa reinventar a roda toda vez que precisa de um recurso diferente. Facilita e agiliza o processo, permitindo a você total foco na lógica do negócio.
Um grande dilema para os desenvolvedores web sempre foi a internacionalização, ou, I18N (entre o I e o N são 18 letras - InternationalizatioN). Em muitos casos, nos remotos tempos do HTML simples, era um verdadeiro pesadelo criar um site com múltiplos idiomas. Bem, mesmo com o PHP e alguns recursos, como o gettext, haviam ainda muitos problemas. Além, é claro, dos dados no caso de sites dinâmicos, que discutirei em um post separado.
Bem, com o symfony isto tudo é coisa do passado. Falarei primeiro da tradução dos templates e termos fixos do aplicativo. Para criar um aplicativo com I18N, basta criar um catálogo xml com os termos e utilizar uma função em seus templates para traduzir os termos. Logo, teríamos um template normal da seguinte forma:
<p>
Bem vindo a página da empresa X!
Agora são < ? php echo date('H:i:s') ? >
</p>
Mas caso eu necessite de outro idioma, ou mesmo preparar meu aplicativo caso isto seja necessário no futuro (pois ao não encontrar o termo, o symfony devolve o termo passado à função), teríamos:
<p>
<? php echo __('Bem vindo a página da empresa X!') ?>
<? php echo __('Agora são %date%' , array ('%date%' => date('H:i:s'))) ?>
</p>
Você deve estar se perguntando o que é esse __(): é a função de tradução, com ela que acontece a mágia da tradução dos termos, você diz ao symfony para procurar uma tradução.
A função aceita como parâmetros:
Termos que devem ser enviados a separadamente, como o %date%, em formato de array, como em nosso exemplo, onde a hora vai ser diferente cada vez que acessarmos o a página, logo, a data deve ser inserida na string após a tradução dos demais termos. Além disto, em alguns idiomas, determinadas informações podem ter uma ordem diferente.
O Nome do arquivo de tradução também pode ser especificado, e, se não o fizer, o symfony procurará pelo arquivo messages.{idioma - 2 letras ISO}.xml na pasta I18N do aplicativo.
A assinatura do método é esta: function __($text, $args = array(), $catalogue = 'messages') {}
Para traduzir para o inglês, devemos criar um arquivo messages.en.xml, e dentro cadastrar as sentenças:
<trans-unit approved="no" id="global_1">
<source>Bem vindo a página da empresa X! </source>
<target state="translated"> Welcome to X company web site!</target>
</trans-unit>
<trans-unit approved="no" id="global_2">
<source> Agora são %date% </source>
<target state="translated"> It's %date% </target>
</trans-unit>
Além do arquivo de tradução do aplicativo, pode-se ainda dividir os arquivos de tradução por módulo, permitindo uma melhor organização dos arquivos.
O symfony ainda possui um arquivo de configuração para o I18N, na pasta config/i18n.yml do aplicativo. Nele você pode configurar alguns parametros como um prefixo e sufixo para identificar termos não traduzidos, habilitar o debug ou desabilitar as traduções.
É isso aí! Com isto você já pode traduzir todos os templates e termos de sua aplicação. Em uma próxima postagem explico como gerenciar traduções para as informações do banco de dados.
Mostrando postagens com marcador Symfony PHP OO I18N. Mostrar todas as postagens
Mostrando postagens com marcador Symfony PHP OO I18N. Mostrar todas as postagens
quinta-feira, 12 de março de 2009
Assinar:
Postagens (Atom)