Bueno, la parte del idioma lleva unos días acabada...
El caso, como comentaba tenemos en diferentes archivos XML la traducción y la descripción de los campos de una base de datos de esta forma...
Código :
<tables>
<table name='tabla1'>
<field name='campo1'>
<translation>Tradución del campo1 o lo que quieras que aparezca en vez del nombre del campo</translation>
<description>Descripción del campo o lo que quieras</description>
</field>
<field name='campo2'>
...
</table>
<table name='tabla2'>
...
</table>
</tables>
Cada archivo debería de ser nombrado con la especificación ISO 639-1 de cada idioma, y siempre deberemos tener al menos el archivo del lenguaje por defecto.
El código de la clase seria el siguiente...
Código :
public class language
{
//Default languaje
private var defaultLang:String = 'es';
//Path where you can find all the XML files
private var langPath:String = './lang/'
//System language
private var lang:String;
//XML file
private var xmlData:XML;
//Constructor of the class
public function language()
{
lang = Capabilities.language;
this.loadLanguage(langPath+lang+'.xml');
}
//Load de system language
public function loadLanguage(url: String):void{
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,loadXML);
loader.addEventListener(IOErrorEvent.IO_ERROR,loadXMLError);
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.load(new URLRequest(url));
}
//Gets the traduccion of one determinate table and one determinate field
public function getTraduction(table:String, field:String):String{
var cadena:String;
for each (var tables:XML in xmlData.elements()) {
if(tables.@name == table){
for each(var fields:XML in tables.elements()){
if(fields.@name == field){
for each(var element:XML in fields.elements('translation')){
cadena = element.toString();
}
}
}
}
}
return cadena;
}
//Gets the description of one determinate table and one determinate field
public function getDesciption(table:String, field:String):String{
var cadena:String;
for each (var tables:XML in xmlData.elements()) {
if(tables.@name == table){
for each(var fields:XML in tables.elements()){
if(fields.@name == field){
for each(var element:XML in fields.elements('description')){
cadena = element.toString();
}
}
}
}
}
return cadena;
}
//Loads the XML file into one XML object
private function loadXML(event: Event):void{
this.xmlData = new XML(event.target.data);
}
//If can not find the system language charges de default language
private function loadXMLError(event: Event):void{
Alert.show('Language '+ this.lang +' not suported.\nWill charge default language '+defaultLang);
this.loadLanguage(this.langPath+this.defaultLang+'.xml');
}
}
}Las funciones que obtienen la información del XML son un poco "toscas" las tengo que depurar porque creo que hay una manera más cómoda.
¿Alguna sugerencia?