Usando ficheiros .po e .mo para traduzir o seu site
Depois de já ter visto várias vezes sites com este tipo de ficheiros decidi fazer o teste com este tipo de tradução e realmente para quem está a pensar em fazer sites muli-lingua esta é sem dúvida a melhor forma de o fazer.
De referir que o que neste caso menciono como tradução são os textos e/ou mensagens colocados no código dos seus ficheiros, como por exemplo os echo(”mensagem”); nos html <label><?=(”mensagem”)</label>, etc…
De forma a facilitar o trabalho deve nos seus ficheiros mudar o seguinte.
Em todas as mensagens, titulos, alertas, etc., que queira ver traduzidos deve mudar o seguinte:
echo (”mensagem”); - deve ser mudado para echo _(”mensagem); ou echo gettext(”mensagem”);
A função _(”") e gettext(”") são a mesma coisa, pela qual eu prefiro a primeira apenas pela sua simplicidade.
De notar que ao usar uma destas opções, caso ainda não tenha criado os respectivos ficheiros de tradução em nada muda o que vai aparecer na página, ou seja, se desde o inicio do seu projecto colocar as mensagens desta forma vai facilitar no final recolher todas as variáveis que tem de ser traduzidas.
No final do projecto, ou antes, para testar, a melhor forma de criar os seus ficheiros de tradução é usar o programa grátis PoEdit, que pode ser encontrado no seguinte link. O PoEdit pode ser usado em várias linguas, incluindo Portugues.
No seu programa PoEdit, crie um novo Catalogo. Preenchendo os dados da primeira janela tal como o exemplo abaixo, e não esquecendo de colocar a codificação em UTF-8, isto para que depois ao colocar as mesagens traduzidas no seu site elas não apareçam com aqueles caracteres malucos
Na 2ª opção, imagem á direita acima, escolha a pasta no seu PC onde está localizado o seu site. Assim, poderemos automaticamente detectar todos os termos que no nosso projecto colocamos com o _(”texto”); ou gettext(”texto”); e rapidamente criar o ficheiro base para tradução.
Agora basta carregar na opção de Actualizar (imagem abaixo) para que automaticamente sejam detectados todos os termos a traduzir.

Depois de actualizado é começar a fazer as traduções dos termos apresentados na lista.
Agora a parte melhor, que é a do código. Imaginando que usam um ficheiro de configuração para os vossos projectos que é carregado globalmente, com as configurações de base de dados, etc.. devem acrescentar o seguinte código:
// variável de lingua, exemplo $_GET["lingua"] $locale = 'pt'; //onde vão ficar os ficheiros .po e . mo a estrutura deve ser //../lib/lang/pt/LC_MESSAGES/msg_pt.{po,mo} para portugues //e ../lib/lang/es/LC_MESSAGES/msg_es.{po,mo}, para espanhol //mas aqui apenas indicamos a pasta de origem $locale_dir = '../lib/lang'; //indica qual o nome do fiheiro a carregar, eu fiz nomes diferentes, //mas poderá usar o mesmo, visto que ficam em pastas diferentes. $message="msg_".$locale; //define a variavel com a lingua escolhida putenv("LANGUAGE=$locale");
Esta secção apenas uso em modo de desenvolvimento, isto porque estes tipo de ficheiro/informação ficam em cache, e a unica forma, de depois de fazer uma alteração a ver é reiniciar o servidor apache, ou mudar os nomes dos ficheiros. Desta forma verificamos qual o ficheiro mais actual e temos sempre a informação actualziada. Depois de concluir, comente esta secção ou elimine-a.
// Caminho para o ficheiro $filename = "$locale_dir/$locale/LC_MESSAGES/$message.mo"; $mtime = filemtime($filename); // verifica se houve modificações // o nosso ficheiro unico $filename_new = "$locale_dir/$locale/LC_MESSAGES/$message-$mtime.mo"; if (!file_exists($filename_new)) { // verifica se já temos algum // se não criamos a partir do original copy($filename,$filename_new); } // mudamos para o novo ficheiro $message = "$message-$mtime"; }
e por fim o resto do código
bindtextdomain($message, $locale_dir); textdomain($message); // manter esta codificação devido aos caracteres especiais bind_textdomain_codeset($message, 'UTF-8');
E prontos, está feito. Espero que a informação vos seja útil.

Envie um comentário