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.