Tema: FAQ's de PHP
Ver Mensaje Individual
  #87 (permalink)  
Antiguo 29/10/2003, 03:57
Avatar de epplestun
epplestun
 
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 4 meses
Puntos: 5
Multiples idiomas basados en XML

Tema: Multiples idiomas

Pregunta: Como puedo hacer una aplicación en varios idiomas y con un solo código?¿

Respuesta
La solucion es bastante sencilla, para ello haremos uso de archivos XML. Nuestro arhcivo puede tener la siguiente forma:

english.xml
Código PHP:
<?xml version="1.0"?>
<!-- english language -->
<language>
    <label>
        <value>File</value>
    </label>
    <label>
        <value>Edit</value>
    </label>
    <label>
        <value>View</value>
    </label>
    <label>
        <value>Options</value>
    </label>
    <label>
        <value>Help</value>
    </label>
</language>
En el archivo XML tenemos una estructura sencilla donde la etiqueta value indica el valor.

Lo que tenemos que hacer es generar un array a partir de la estructura del XML, para ello haremos uso de la funcion xml_parse_into_struct(), esta funcion nos genera el array y lo trabajaremos de la siguiente manera:

language.php
Código PHP:
<?php
class lang {
    var 
$word  = array();
    var 
$words = array('file''edit''view''options''help');
    
    function 
loadLanguage($lang "english.xml") {
        
$xml    implode(""file(dirname(__FILE__)."/".$lang));
        
$parser xml_parser_create();
        
xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
        
xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
        
xml_parse_into_struct($parser$xml$vals$tags);
        
xml_parser_free($parser);
        
$i 0;
        foreach(
$vals as $key => $value) {
            if(!empty(
$value['value'])) {
                
$this->word[strtoupper($this->words[$i])] = ucfirst($value['value']);
                
$i++;
            }
        }
        return 
$this->word;
    }
    
    function 
viewInfo() {
        
$this->loadLanguage();
        return 
print_r($this->word);
    }
}
$lang   = new lang();
$lang -> viewInfo();
$labels =& $lang -> loadLanguage();
echo 
$labels['FILE'];
?>
De esta manera tenemos un array con todos los datos, y dependiendo del archivo que se le indique estara en un idioma u otro, y tan solo tendremos que programar una aplicacion haciendo uso de: echo $labels[indice];.

Espero que sea de ayuda, ami me lo a sido de muchísima ya que para la el soporte multiidioma del PHP-EDDI-DEV se basa en ello :D

Saludillos!!!
__________________
Usuario registrado de Linux #288725