¿Quieres registrarte?

Sites multi lenguajes con XML en ActionScript 3.0

Por: eldervaz
16 de Febrero del 2008
7353 de clabLevel
Otros artículos de eldervaz
10,859 visitas

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í

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas xml actionscript_3

Comentarios | Enviar un comentario
Buen Tip sin duda ! Bien por ti, y por adriesp...
(y)
Por: No Soy M@U !
Muy bien explicado. Yo encontré esta clase recientemente y la estoy usando para una web. Te facilita mucho el trabajo y añadir nuevos idiomas es trivial.
Saludos
Por: adriesp
Buen Tip Elder, muy útil esta clase (y)
Por: Zguillez
Nunca le había prestado atención a esa clase, pero parece que facilita bastante la tarea para trabajar con idiomas, que dicho sea de paso, es un coñazo ^^

Gracias elder! :wink:
Por: llops
Es estupendo, estupendo, si señor!!!

:)
Por: Sisco
:shock:, por dios, cuantas barbaridades me habria ahorrado esto hace un par de meses atras

muy buena esa elder.. !! (y)


salu2 ^^
Por: Joris_blog
bravisimoooo, no tengo palabras para describir mi admiración, es genial, este tip va para mi carpeta de "importantísimos".

Una vez mas, gracias eldervaz.
Por: Señor Oz_blog
:Pbien man la isite con esa clase me salvas xD
Por: EnRiQuE_blog
:O
Por: EnRiQuE_blog
Esta herramienta si que nos será muy útil a todos la vamos a probar. Gracias
Por: Edna Rheiner_blog
Porque en formato xliff?
Por: gcm
Genial elder, será muy útil. U_U
Por: Bleend
Muy buen Tip

Pero de donde sale la clase fl? cuando hago import en mi biblioteca de clases, fl no aparece?
Por: dgl
Esto lo quiero hacer para mi sitio, si que se puede, con muchos dolores de cabeza
Por: Siriö
Para un sitio completo para traduccion automatica, se necesitan mas codigos?
Por: Siriö
El archivo .fla no lo puedo abrir ni con mx ni con flash 8, esta dañado, alguien me lo podra mandar bien a mi direccion? jjfnino@hotmail.com porque hay cosas que no me quedaron claras.
muchas gracias!
Por: Francisco-blog

Francisco-blog :

El archivo .fla no lo puedo abrir ni con mx ni con flash 8, esta dañado, alguien me lo podra mandar bien a mi direccion? jjfnino@hotmail.com porque hay cosas que no me quedaron claras.
muchas gracias!


hi, es flash CS3 :)
Por: eldervaz
Gracias Lo probare es lo que estaba buscando
Por: Guti-blog
Lo de los multilenguajes es una opcion muy pedida actualmente y facilita el multiuso de la aplicacion gracias por el tema lo estaba esperando hace tiempo

salu2s
Por: JavierFM
esto es re voludo y bobo y no me encanta
Por: camila-blog
Y si quiero ejecutar esta clase en un swf cargado en la escena con un texto dinamico como se puede hacer para que me cargue tambien el texto?

Gracias por adelantado
Por: Nillus-blog
Cuando se cargue el swf accede al campo de texto desde su nombre de instancia y cargas el texto:

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: adriesp
Pues muchas gracias. Voy a probarlo
Por: Nillus-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.