Ferramentas de Usuário

Ferramentas de Site


dev_web:php:website-poliglota

Website poliglota

Criação de um website poliglota.

config.php
<?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
index.php
<?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

  1. Fazer download do Poedit
  2. Abrir o Poedit
  3. Clicar em "Ficheiro"
  4. Clicar em "Novo catálogo"
  5. 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)
    • 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
  6. Clicar em "OK"
  7. Clicar em "Catálogo"
  8. Clicar em "Actualizar a partir do código-fonte"
  9. PUF… MAGIA ! Apareceram as strings a serem traduzidas
  10. Clicar na string a ser traduzida
  11. No fundo do programa, no segundo campo, escrever a tradução e carregar na tecla enter
  12. Clicar em "Ficheiro"
  13. 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
        • [li]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.


Créditos a Lfscoutinho.

dev_web/php/website-poliglota.txt · Última modificação em: 2018/05/14 21:37 (edição externa)