Classe de Internacionalização(Multi linguagens)

Publicado por Rodrigo Rodrigues dos Santos 11/06/2005

[ Hits: 10.874 ]

Download phpi18n.zip




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.

  



Esconder código-fonte

// 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: [email protected]
* 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");
?>

Scripts recomendados

Cria gráficos para monitoramento de consumo de CPU e Memória a partir de arquivos [Atualização].

Mostra a quantidade dos dias da semana em intervalo

PHP Download

Função para converter datas

Aposta Certa


  

Comentários
[1] Comentário enviado por augusto_hp em 18/09/2008 - 18:20h

Você conhece as funções do próprio PHP para internacionalização, que são por acaso as mesmas funções que as aplicações Linux e muitas outras usam ?
http://www.php.net/gettext


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts