Classe de Internacionalização(Multi linguagens)
Publicado por Rodrigo Rodrigues dos Santos 11/06/2005
[ Hits: 11.700 ]
Uma classe simples para seus sistemas/aplicações/sites serem multi linguagens sem replicar informações, apenas usando arquivos Xmls para as traduções.
Tem um exemplo do script usando o já conhecido Smarty Templates(smarty.php.net), para testar acesse o "index_smarty.php" mas lembrando que não tem os fontes do Smarty, pode pegar direto no site.
Espero que gostem, caso tenham alguma crítica/dúvida/sugestão entre em contato.
Sem mais, Rodrigo.
// class_phpi18n.php
<?php
/**
* Classe simples para internacionalizar sua aplicação em diversas linguagens, para cada linguagem existirá um arquivo Xml contendo as traduções.
* O script é muito simples(porém eficiente), ele lê o arquivo Xml de tradução, faz um loop e adiciona no array($arrayLabel) os índices(atributo <name>) e seus valores(atributo <value>).
* Através desse índice ele retorna a tradução da linguagem selecionada.
* O padrão de nomenclatura dos arquivos Xmls serão esses:
* phpi18n.xml -> Linguagem padrão
* phpi18n_xx_XX.xml -> Ondes xxXX são a abreviação da linguagem e país.
* Para maiores detalhes sobre abreviaturas dos países acessem(http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt, http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html, http://www.iso.org/iso/en/prods-services/iso3166ma/index.html).
* Autor: Rodrigo Rodrigues
* Email: web-rodrigo@bol.com.br
* Versão: 1
* IMPORTANTE: PRECISA TER INSTALADO O PHP 5 PORQ USA O COMPONENTE SimpleXml(http://br.php.net/manual/pt_BR/ref.simplexml.php).
*/
class PhpI18N {
/**
* Variável Array privada com os valores da tradução.
*/
private $arrayLabel = array();
/**
* Variável privada com o nome default do arquivo Xml de tradução.
*/
private $xmlFile;
/**
* Variável privada com o nome da linguagem.
*/
private $language;
/**
* Variável privada com o nome do país.
*/
private $country;
/**
* Variável privada com o nome do arquivo Xml de tradução.
*/
private $xml;
/**
* Método construtor para configurar a linguagem e o país de tradução, caso não encontre o arquivo Xml de tradução entra no default(Português).
*/
function __construct($xmlFile = "", $language = "", $country = "") {
if(empty($xmlFile)){
$xmlFile = "phpi18n";
}
$this->language = $language;
$this->country = $country;
$this->xml = $xmlFile;
if(!(empty($this->language) && empty($this->country))){
$this->xml .= "_".$this->language."_".$this->country;
}
$this->xml .= ".xml";
$this->loadXml($this->xml);
}
/**
* Método para carregar o xml da linguagem selecionada.
*/
private function loadXml($xml) {
if(!file_exists($xml)){
$xml = "phpi18n.xml"; // Language Default
}
$simpleXml = @simplexml_load_file($xml);
if(!$simpleXml){
echo "Não existe tradução padrão.";
exit();
}
foreach($simpleXml->label as $loadLabel){
$this->arrayLabel["$loadLabel->name"] = $loadLabel->value;
}
}
/**
* Método que retorna o nome do arquivo Xml.
*/
public function getXml() {
return $this->xml;
}
/**
* Método que retorna o valor da tradução.
*/
public function getLabel($keyName) {
return utf8_decode($this->label($keyName));
}
/**
* Método privado que verifica se o parâmetro existe na chave(índice) do array, caso exista retorna seu valor.
*/
private function label($keyName) {
if($this->arrayLabel == null || $this->arrayLabel[$keyName] == null ){
return "empty";
}
return $this->arrayLabel[$keyName];
}
/**
* Método para destruir o array de tradução.
*/
function __destruct() {
unset($this->arrayLabel);
}
}
?>
// Exemplo
<?php
include_once("class_phpi18n.php");
$phpI18N = new PhpI18N("", $_GET['lan'], $_GET['cou']);
echo $phpI18N->getLabel("title");
?>
Folha de Ponto, com datas móveis como Carnaval Sexta-Feira Santa e Corpus Christi
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
VOL já não é mais como antes? (9)
É normal não gostar de KDE? (13)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









