Ver Mensaje Individual
  #8 (permalink)  
Antiguo 19/04/2012, 05:29
j4vitux
 
Fecha de Ingreso: noviembre-2011
Ubicación: 127.0.0.1
Mensajes: 8
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: Múltiples idiomas en la web

Yo utilizo ésta clase para manipular un archivo xml donde almaceno las traducciones.


Código PHP:
class languages {
    
    public 
$tr$language;
    private 
$engine;
    
    function 
__construct() {
        
        
$this->xml=simplexml_load_file('inc/multilenguaje.xml');
        
$this->setLang();        

    }
    
    public function 
setLang() {
    
// select language
    
if (!isset($lang)) {
        if (isset(
$_GET['lang'])) {
            
$lang=$_GET['lang'];
        } else {
            
$langgetPreferredLanguage();
        }
        
        if (!
$this->validateLang($lang)) {
            echo 
sprintf("<h1>Language '%s' not supported!</h1>"$lang);
            die;
        }
        
$this->language=$lang;
        @
setcookie('lang'$lang); 
        } else {  @
setcookie('lang'$lang); $this->language=$lang; }
    }
    
    public function 
validateLang($language) {
      if (
strchr("ites"$language)) { 
        
$this->language=$language;
            return 
True;
        } else { 
            return 
False;
        } 
    }
    
    public function 
gets($key$item) {
        
$xpath='/translation2/pages/page[@key="' $item '"]/string[@key="' $key '"]/tr[@lang="' $this->language '"]';
        
$data=$this->xml->xpath($xpath);
        return 
$data;
    }
    
    public function 
getPage($key) {
        
$xpath='/translation2/pages/page[@key="' $key '"]/string/tr[@lang="' $this->language '"]';
        
$xpath2='/translation2/pages/page[@key="' $key '"]/string/@key';
        
$xmlitems=$this->xml->xpath($xpath);        
        
$xmlkeys=$this->xml->xpath($xpath2);

        
$pg=array();
        for (
$i=0;$i<=count($xmlitems);$i++) {
            
$pg["{$xmlkeys[$i]}"]=$xmlitems[$i];                        
        }    
        
        return (array)
$pg;
    }


Y en cada página puedes poner :

Código PHP:
$l=new languages(); 
más adelante, para obtener cada definición :

Código PHP:
$c=$l->getPage('cabecera'); 
muestras el contenido con:

Código PHP:
<?=$c["hola"]; ?>
la sintaxis del archivo xml es la siguiente :

Código:
<?xml version="1.0" encoding="UTF-8"?>
<translation2>
    <languages>
        <lang id='es'>
            <name>Castellano</name>
            <meta/>
            <error_text>No disponible</error_text>
            <encoding>UTF-8</encoding>
        </lang>
        <lang id='en'>
            <name>English</name>
            <meta/>
            <error_text>Not allowed</error_text>
            <encoding>UTF-8</encoding>
        </lang>
    </languages>
    <pages>
        <page key='cabecera'>
            <string key='hola'>
                <tr lang='es'>Bienvenido a nuestra página</tr>
                <tr lang='en'>Welcome to our home page</tr>
            </string>
            <string key='inicio'>
                <tr lang='es'>Inicio</tr>
                <tr lang='en'>Home</tr>
            </string>
            <string key='quienes_somos'>
                <tr lang='es'>Quienes somos</tr>
                <tr lang='en'>Who are we</tr>
            </string>
        </page>
     </pages>
</translation2>
El acceso se hace mediante un parámetro get : page.com?lang=es

Si necesitas más información, no dudes en preguntar.

Saludos!

Última edición por j4vitux; 19/04/2012 a las 05:36