Buenas, el caso es el siguiente. Estaba tratando de usar la funcionalidad multilingüe en flash mediante la clase mx.lang.Locale y me ocurrió lo siguiente:
Mi idea era crear un botón que en cualquier momento me permitiese realizar una traducción automática del sitio web. Con la clase Locale y el panel Cadenas puedes registrar todos los campos de texto de tu web y seleccionar un idioma bien mediante código o bien automáticamente dejando que el flash detecte el lenguaje por defecto del servidor.
Bueno al lío. El caso es que usando la función Locale como comentaba conseguía cambiar de un lenguaje a otro correctamente la primera vez, pero al volver a un idioma cargado anteriormente ya no traducía. Por ejemplo, si la web admite inglés, francés y español y lo cargo en español va bien, después cargo inglés y va bien pero si quieres volver a cargar español ya no funciona.
Bueno revisando el código de la clase Locale encontré el error y lo corregí. Es un cambio muy sencillo, hay que localizar la función loadLanguageXML en el código y hacerle una pequeña modificación:
Código :
// Load the specified language xml file.
static function loadLanguageXML(xmlLanguageCode:String, customXmlCompleteCallback:Function):Void {
// if xmlLang is not defined, set to SystemCapabilities.language
var langCode:String = (xmlLanguageCode == "") ? System.capabilities.language : xmlLanguageCode;
if(xmlMap[langCode] == undefined) {
// if the specified language is not defined, set to default language
langCode = defaultLang;
}
if (customXmlCompleteCallback) {
callback = customXmlCompleteCallback;
}
if (stringMapList[xmlLanguageCode] == undefined) {
// if the xml has not been loaded before, load it
if (xmlDoc)
delete xmlDoc;
xmlDoc = new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.onLoad = function(success:Boolean) {
onXMLLoad(success); // parse the XML
callback.call(null, success);
}
xmlDoc.load(xmlMap[langCode][0]);
} else {
// the xml is already loaded, retrieve it from the list
stringMap = stringMapList[langCode];
/*codigo a añadir */
if (autoReplacment) {
assignDelayedInstances();
}
/* fin */
// call the callback here because onLoad is not called here
if (callback)
callback.call(null, true);
}
currentLang = langCode;
}
Código :
if (autoReplacment) {
assignDelayedInstances();
}
Código :
import mx.lang.Locale;
var defLang:String = "en";
lang_cb.dataProvider = Locale.languageCodeArray.sort();
lang_cb.addEventListener("change", langListener);
this.createTextField("greeting_txt", 10, 40, 40, 200, 20);
greeting_txt.autoSize = TextFieldAutoSize.LEFT;
Locale.addDelayedInstance(greeting_txt, "IDS_GREETING");
Locale.setString("IDS_GREETING", "en", "hello");
Locale.setString("IDS_GREETING", "fr", "bonjour");
Locale.setString("IDS_GREETING", "es", "buenas");
Locale.autoReplace = true;
function langListener(eventObj:Object):Void {
Locale.loadLanguageXML(eventObj.target.value);
}