O que acha de ter um site que pode ser visualizado em mais de um idioma? Se você já pensou nisso, mas nunca tentou por acreditar que vai ter 2, 3, 4… vezes mais arquivos para editar, talvez mude de idéia. A seguir mostrarei como fiz isso criando a função defineLanguage. A idéia é bem simples: uma função retorna o nome do .php a ser incluído de acordo com o idioma principal do navegador do visitante, ou muda uma variável de sessão caso o visitante queira mudar o idioma.
defineLanguage.php
< ? // <= se você usar diretamente os exemplos mostrados aqui, não esqueça de tirar o espaço entre cada '<' e '?' function defineLanguage() { /* Neste if, verifica-se se a variável $_SESSION['lang'] deve ser alterada em função de um visitante querer alterar o idioma (por meio de ícones com bandeiras, forms, ...). Retorna o nome do script php que contém o array com o idioma correspondente. */ if (isset($_POST['change'])) { switch ($_POST['change']) { case 'pt' : $_SESSION['lang'] = 'pt'; return 'pt_br.php'; break; case 'en' : default : $_SESSION['lang'] = 'en'; return 'en.php'; break; } } // if (isset($_POST['change'])) /* Neste if, a variável $_SESSION['lang'] é inicializada com o idioma padrão do navegador do visitante. */ if (!isset($_SESSION['lang'])) { $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $_SESSION['lang'] = substr($lang, 0, 2); } // if (!isset($_SESSION['lang'])) ?>
Depois de setar $_SESSION['lang'], o switch retorna o nome do script php que contém o array com o idioma correspondente. A função só retorna o nome do arquivo porque o caminho relativo da pasta language (p. ex. ./../../language/) deve ser concatenado no script destino da função — p. ex. require_once(‘./../../language/’.$file);
Neste exemplo, se o idioma do visitante não é português, o resultado será uma página em inglês.
< ? switch ($_SESSION['lang']) { case 'pt' : return 'pt_br.php'; break; case 'en' : default : return 'en.php'; break; } // switch ($_SESSION['lang']) } ?>
Os arquivos pt_br.php e en.php deverão conter um array com o conteúdo em português e em inglês, respectivamente, como mostram os exemplos a seguir. Lembre-se que o nome da variável declarada como array deve ser o mesmo em todos os arquivos, bem como os índices devem ser iguais em todos os arrays.
pt_br.php
< ? $text = array ( // window titles 'pageOneTitle' => 'exemplo.com • Título da página inicial', 'pageTwoTitle' => 'exemplo.com • Título de outra página', // misc 'text' => 'Texto.', 'text1' => 'Texto um.', 'text2' => 'Texto dois.', ); ?>
en.php
< ? $text = array ( // window titles 'pageOneTitle' => 'exemplo.com • Home page\'s title', // não esqueça que há caracteres que devem ser precedidos de \ 'pageTwoTitle' => 'exemplo.com • Another page\'s title', // misc 'text' => 'Text.', 'text1' => 'Text one.', 'text2' => 'Text two.', ); ?>
Como utilizar a função?
Inicie cada página do seu site com o seguinte código php:
< ? session_start(); // session_start deve estar na primeira linha, para evitar 'warnings' do php require_once ('./language/defineLanguage.php'); $file = defineLanguage(); $languageFile = './language/'.$file; require_once ($languageFile); ?>
Para inserir o texto do array adicionado pelo require_once, utilize < ?=$text['text']?> para cada ocorrência de textos que você queira disponibilizar em mais de um idioma.