PHP:¿Cómo puedo hacer una aplicación en varios idiomas y con un sólo código?

De Foros del Web

La solución es bastante sencilla, para ello haremos uso de archivos XML. Nuestro archivo 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 función xml_parse_into_struct(), esta función 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($parser, XML_OPTION_CASE_FOLDING, 0); 
        xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); 
        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 estará en un idioma u otro, y tan sólo tendremos que programar una aplicación haciendo uso de: echo $labels[indice];.


--epplestun 29 Oct 2003

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales