Quem já quis traduzir aquelas mensagens “Missing Model”, “Missing Controller”, etc e nunca soube como? Pois bem, isso é mais simples do que você pensa e não precisa mexer nos arquivos fontes do CakePHP. Todo o sistema do framework tem suas mensagens internacionalizáveis, portanto basta traduzí-las e colocar no seu sistema que ele automaticamente traduzirá para o cliente (quem está acessando a página).
O padrão que o CakePHP utiliza é o inglês (en), mas no nosso caso teríamos que utilizar o português do Brasil (pt_BR). Como eu participo do projeto de tradução das mensagens, vou explicar como utilizá-las. Baixe os dois arquivos de traduções neste link. Eles se chamam core.mo e core.po, você deve colocá-los na pasta app/locale/pt_BR/LC_MESSAGES/.
Adicionado em 10/11/08: Você também pode baixar a versão mais atual e mantida pelo Gabriel Gilini, no seu post sobre tradução do núcleo: Traduzindo o core de sua aplicação CakePHP.
Assim quando alguém com browser em português acessar a página e o framework imprimir alguma mensagem, ele já vai mostrá-la em português. Simples não?
Bem, mas agora eu vou lhes informar como para fazer com que o SEU sistema fique internacionalizado. Quando você for colocar alguma mensagem que irá aparecer para o cliente (normalmente numa view, helper, element ou layout), você deve digitar com uma das maneiras abaixo:
- Imprimindo o texto, ou seja, [echo “olá mundo”]: __(”olá mundo”);
- Sem imprimir o texto, ou seja, [$var = “olá mundo”]: __(”olá mundo”, true);
Quando você usa o segundo parâmetro como true ele retornará o valor e não imprimirá. Depois de feito isso em todo seu projeto, você terá de exportar esses parâmetros para um arquivo separado do tipo POT, como, por exemplo, “default.pot”. Neste arquivo terão que conter todas as strings que você colocou nos __(). Complicado né? Sorte que temos o cake console. Ele poupa nosso tempo e faz isso para nós. Você pode ir no console (”MS-DOS”, “cmd”, “command”, etc. no Windows ou “Bash”, “Terminal”, etc. no Linux), entrar na pasta da sua aplicação, por exemplo, “C:\apache\htdocs\sistema\app\” e digitar “..\cake\console\cake i18n extract”. Ele irá pedir o diretório da aplicação, basta colocar e seguir os passos seguintes…
Feito isso, ele vai gerar o arquivo com o nome e no local que você escolheu (o padrão é “app/locale/default.pot”). Com este arquivo, você usar uma aplicação como o poEdit para realizar a tradução para os diversos idiomas. Se você escreveu seus comandos __() em português, não precisará fazer o arquivo no locale para o pt_BR. Os arquivos traduzidos terão que ficar na pasta “app/locale/IDIOMA/LC_MESSAGES/”, onde o IDIOMA é a abreviatura do idioma, por exemplo, pt_BR, en, es, etc.
PS: Só lembrando que o sistema de internacionalização está disponível apenas no CakePHP versão 1.2 em diante.
Mais informações sobre os sistemas de tradução para softwares, bem como as siglas dos idiomas, você encontra no Wikipedia neste link.
Acessando o link https://cakeforge.org/plugins/scmsvn/viewcvs.php/trunk/locales/cake/locale/pt_br/LC_MESSAGES/?root=translations divulgado nesta página, descobri algo muito curioso. O site do cakePHP é feito em Python… Veja o erro:
“Python Traceback
Traceback (most recent call last):
File “/var/lib/gforge/etc/viewcvs.py”, line 3235, in main
request.run_viewcvs()
File “/var/lib/gforge/etc/viewcvs.py”, line 317, in run_viewcvs
% self.where, ‘404 Not Found’)
ViewCVSException: 404 Not Found: trunk/locales/cake/locale/pt_br/LC_MESSAGES: unknown location”
Comentário por Rome Pavan — 28 outubro 2008 @ 9:50 pm
Rome, o ViewCVS é feito em python sim e é utilizado pelo CakeForge. Quanto ao problema do link, já corrigi. Eles mudaram no repositório o diretório.
Obrigado por ter informado.
Comentário por Juan Basso — 28 outubro 2008 @ 10:20 pm
Pretendo fazer um site em cakephp com páginas bastante simples, porém pretendo colocar o conteúdo do site em quatro idiomas. Qual seria a melhor forma para fazer isso. Este sistema que você apresentou serviria também para o site? O que você sugere neste caso?
Comentário por Mauricio de Souza — 13 outubro 2009 @ 2:31 pm
Mauricio. Sugiro você postar esta sua dúvida no Groups de CakePHP (http://groups.google.com/group/cakephp-pt). Entretanto, usar o que postei aqui é apenas um dos artificios para a tradução. Você vai encontrar behaviour de tradução, funções, segredos, etc.
Comentário por Juan Basso — 13 outubro 2009 @ 7:17 pm