Cristalab

                 ¿Quieres registrarte?

Sites multi lenguajes con XML en ActionScript 3.0

Por: eldervaz
16 de Febrero del 2008
5128 de clabLevel
Otros artículos de eldervaz
9,498 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í


Artículos Relacionados


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
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.