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($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 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!!!