Me bastó ver este tip de ActionScript 2 para ponerme a investigar sobre como hacer un site o una app (application) que soporte varios lenguajes sin tener que hacer un FLA por cada uno de ellos. Entonces sólo era ver la Clase fl.lang.Locale, que en realidad es muy simple y fácil de usar.
Para eso lo primero que tenemos son varios archivos XML con los textos traducidos, uno por idioma en formato XLIFF en UTF-8 (no olvides guardarlos en este formato). Además pueden encontrar más información en la documentación de Adobe
en.xml
Código :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd" > <xliff version="1.0" lang="es"> <file datatype="plaintext"> <header></header> <body> <trans-unit resname="NOMBRE"> <source>nombre</source> </trans-unit> <trans-unit resname="TELEFONO"> <source>telefóno</source> </trans-unit> </body> </file> </xliff>
Donde realmente lo unico q importa es:
Código :
<trans-unit resname="NOMBRE"> <source>nombre</source> </trans-unit>
En resname colocamos el identificador que nos dirá la traducción en todos los XML, en este caso (español) "nombre"
Con eso podemos tener varios idiomas en distintos XML. Ahora pasamos al ActionScript.
Necesitamos importar la clase:
Código :
import fl.lang.Locale;
Luego agregamos los idiomas que utilizaremos en nuestro archivo, en mi ejemplo pongo 3 idiomas
Código :
Locale.addXMLPath("es", "lang/es.xml"); Locale.addXMLPath("en", "lang/en.xml"); Locale.addXMLPath("fr", "lang/fr.xml");
Inicializo la clase y cargo el idioma por defecto y muestro la data en un método
Código :
Locale.initialize(); Locale.setDefaultLang("es"); Locale.setLoadCallback(init);
Y eso es todo, solo mostramos la data así:
Código :
private function init(event:Boolean):void { nombre.text = Locale.loadString("NOMBRE"); telefono.text = Locale.loadString("TELEFONO"); }
Para cambiar de idioma es:
[asas]Locale.loadLanguageXML("fr");[/as]
El código completo aquí:
Código :
package { import flash.display.MovieClip; import flash.display.SimpleButton; import flash.events.MouseEvent; import flash.text.TextField import fl.lang.Locale; public class CambiarIdioma extends MovieClip{ public function CambiarIdioma() { //cargo los xml Locale.addXMLPath("es", "lang/es.xml"); Locale.addXMLPath("en", "lang/en.xml"); Locale.addXMLPath("fr", "lang/fr.xml"); //inicializo Locale.initialize(); //cargo el idioma por defecto Locale.setDefaultLang("es"); Locale.setLoadCallback(init); //agrego mis listener a mis botones btn_en.addEventListener(MouseEvent.CLICK, cambiar); btn_es.addEventListener(MouseEvent.CLICK, cambiar); btn_fr.addEventListener(MouseEvent.CLICK, cambiar); } private function init(event:Boolean):void { nombre.text = Locale.loadString("NOMBRE"); telefono.text = Locale.loadString("TELEFONO"); } private function cambiar(event:MouseEvent):void { var miIdioma:String; switch (event.target.name) { case "btn_es": miIdioma = "es"; break; case "btn_en": miIdioma = "en"; break; case "btn_fr": miIdioma = "fr"; break; } //actualizó el idioma Locale.loadLanguageXML(miIdioma); } //fin de clase } }
Los archivos aquí
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por No Soy el 17 de Febrero de 2008
Por adriesp el 17 de Febrero de 2008
Saludos
Por Zguillez el 17 de Febrero de 2008
Por llops el 18 de Febrero de 2008
Gracias elder!
Por Sisco el 18 de Febrero de 2008
Por Joris el 18 de Febrero de 2008
muy buena esa elder.. !!
salu2
Por Señor Oz el 18 de Febrero de 2008
Una vez mas, gracias eldervaz.
Por EnRiQuE el 18 de Febrero de 2008
Por EnRiQuE el 18 de Febrero de 2008
Por Edna Rheiner el 19 de Febrero de 2008
Por gcm el 19 de Febrero de 2008
Por Bleend el 20 de Febrero de 2008
Por el 28 de Febrero de 2008
Pero de donde sale la clase fl? cuando hago import en mi biblioteca de clases, fl no aparece?
Por Siriö el 23 de Septiembre de 2008
Por Siriö el 26 de Septiembre de 2008
Por Francisco el 27 de Octubre de 2008
muchas gracias!
Por eldervaz el 27 de Octubre de 2008
Francisco-blog :
muchas gracias!
hi, es flash CS3
Por Guti el 19 de Diciembre de 2008
Por JavierFM el 16 de Enero de 2009
salu2s
Por camila el 07 de Julio de 2009
Por Nillus el 13 de Febrero de 2010
Gracias por adelantado
Por adriesp el 14 de Febrero de 2010
function cargaCompletada(){
/* con esto añades el campo de texto a la clase para que lo traduzca automáticamente si cambia el lenguaje posteriormente
cuando se llame a Locale.loadLanguageXML. Buscará en el xml del idioma el texto con el identificador IDS_TEXTO y cargará el resultado en objetoCargado.campoTexto */
Locale.addDelayedInstance(swfCargado.campoTexto, "IDS_TEXTO");
// con esto cargas el texto manualmente pero tienes que hacerlo cada vez que se cambie el idioma de la aplicación
objetoCargado.campoTexto.text = Locale.loadString("IDS_TEXTO");
saludos
}
Por Nillus el 15 de Febrero de 2010
Por CLAnonimo el 19 de Enero de 2011
Por david el 04 de Abril de 2011
Por Stéphane el 29 de Abril de 2011
Ademas soy Frances y me hace trabajar mi Español !
2 Gracias !