Classe de Internacionalização(Multi linguagens)
Publicado por Rodrigo Rodrigues dos Santos 11/06/2005
[ Hits: 11.470 ]
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
Mostra a quantidade dos dias da semana em intervalo
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (14)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)