Website poliglota
Criação de um website poliglota.
<?php
/**
* @author Luis Coutinho <Luis@lfscoutinho.net>
* @date 05/06/2011
*/
session_start();
define('SESS_LING', 'lingua' ); // Chave da $_SESSION que vai conter a língua
define('SESS_LING_DEF', 'pt_PT' ); // Língua por defeito
// Função para mudar a língua
function mudarLingua( $lingua ) {
$linguas = array( 'pt', 'br', 'fr', 'en', 'us' );
if( in_array( $lingua, $linguas ) ) {
switch( $lingua ) {
case 'pt' :
case 'br' :
$lingua = 'pt_PT';
break;
case 'fr' :
$lingua = 'fr_FR';
break;
case 'en' :
case 'us' :
$lingua = 'en_GB';
break;
}
} else {
$lingua = SESS_LING_DEF;
}
$_SESSION[SESS_LING] = $lingua;
}
// Verifica se o utilizador quer mudar de língua
if( isset( $_GET['ling'] ) ) {
mudarLingua( $_GET['ling'] );
} elseif( ! isset( $_SESSION[SESS_LING] ) ) {
$_SESSION[SESS_LING] = SESS_LING_DEF;
}
define('LOCAL', $_SESSION[SESS_LING] . '.UTF-8' ); // Define o local
setlocale( LC_ALL, LOCAL ); // Define as informações locais
putenv( "LC_ALL=" . LOCAL ); // Necessário em alguns sistemas
putenv( "LANGUAGE=" . LOCAL ); // Necessário em alguns sistemas
textdomain( 'traducao' ); // Define o domínio padrão
bindtextdomain( 'traducao', './linguas' ); // Configura o caminho para um domínio
bind_textdomain_codeset( 'traducao', 'UTF-8' ); // Define a codificação dos caracteres
<?php
/**
* @author Luis Coutinho <Luis@lfscoutinho.net>
* @date 05/06/2011
*/
require 'config.php'; // Requer o ficheiro "config.php"
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="Luis Coutinho <Luis@lfscoutinho.net>" />
<title>Website poliglota</title>
</head>
<body>
<p><a href="?ling=pt">PT</a> <a href="?ling=fr">FR</a> <a href="?ling=en">EN</a></p>
<p><?php echo gettext('Olá mundo!') ?></p>
<p><?php echo _('Olá mundo!') ?></p>
<p><?php printf( ngettext( '%d teste', '%d testes', 1 ), 1 ) ?></p>
<p><?php printf( ngettext( '%d teste', '%d testes', 2 ), 2 ) ?></p>
</body>
</html>
Informações
Existem várias maneiras de se criar um website poliglota, como por exemplo: utilizando arrays ou constantes. No entanto, na minha opinião, esta é forma mais fácil, simples e elegante, ou seja, a melhor.
Ficheiros de tradução
- Fazer download do Poedit
- Abrir o Poedit
- Clicar em Ficheiro
- Clicar em Novo catálogo
- Preencher todos os campos
- Na aba *Dados do projecto?
- Nos campos Codificação e Codificação do código-fonte escolher
UTF-8
- Nas formas plurais, depende da língua (podem ver neste site a forma plural da língua que querem traduzir)
- Nos campos Codificação e Codificação do código-fonte escolher
- Na aba Pastas
- No campo *Pasta base? devem indicar a localização da pasta com os ficheiros a serem traduzidos, por exemplo
C:/wamp/www/website-poliglota
- Em baixo, devem carregar no segundo botão (Nova entrada), adicionar um
.
(ponto-final) e carregar na tecla enter
- No campo *Pasta base? devem indicar a localização da pasta com os ficheiros a serem traduzidos, por exemplo
- Na aba *Dados do projecto?
- Clicar em OK
- Clicar em Catálogo
- Clicar em Actualizar a partir do código-fonte
PUF... MAGIA ! Apareceram as strings a serem traduzidas- Clicar na string a ser traduzida
- No fundo do programa, no segundo campo, escrever a tradução e carregar na tecla enter
- Clicar em Ficheiro
- Clicar em Guardar
Estrutura das pastas/ficheiros
A estrutura das pastas/ficheiros tem de ser a seguinte:
config.php
index.php
linguas
en_GB
LC_MESSAGES
traducao.mo
traducao.po
fr_FR
LC_MESSAGES
traducao.mo
traducao.po
Atenção
Por vezes, depois de criar/editar os ficheiros de tradução, é possível que não apareçam as novas traduções/correcções. Sinceramente, não sei qual o motivo para isto acontecer, sendo que mesmo limpando a cache e afins, continuam a não aparecer. A solução que conheço para este problema é reiniciar o computador. Contudo, se conheceres outra solução estás à vontade para partilhá-la e o povo agradece.