b-log – betriebsraum weblog

Software Development, Human-Computer Interaction, Projects…

Dealing with multilingual content and mx.lang.Locale

October 13, 2005

A few time ago we had to make a small flash site with multilingual content. The site itself was really simple, nothing complicated, with the only “dynamic” feature to support more than one language in the textfields. So we thought this would be the golden opportunity to try out the strings panel which is built into flash since mx2004 and is probably the simplest way to add more languages to your file. No loading and reading xml files or databases etc.. Just enter your strings in different languages in the strings panel and your’re done. Unfortunately it turned out that these strings things are quite useless. Here’s why: (Note that I’m speaking of FlashMX 2004 here and not Flash 8).

If you want a bit more control over the whole xml selection and loading process, you could use mx.lang.Locale manually…well, you could…:
mx.lang.Locale is full of static methods which is bad if you want to subclass. Why would you want to subclass? For example, if you want to add a method for setting the xml file to load manually (user clicks a language selection button and you want to load the proper xml file). So, I copied the class and modified it to better suit our needs. Here are the changes:

Then you can set the fla name and the paths to the xml files manually, have a language selection button, combobox or whatever which sets the xml file, load the xml file and start your movie when the xml file is loaded. Then you call loadString() (in any frame!) to set the content of your textfields. This is maybe a better and more flexible solution than the built-in auto-dectect-language-and-auto-set-all-textfields-in-first-frame-solution but I don’t like the whole mx.lang.Locale and strings panel thing. The xml files it generates use id numbers and are very unintuitive to edit.

The best solution we came up for small websites is this: Create your xml files, one for each language, with descriptive tag names and a label attribute and, write your code for selecting the right xml file and preloading. In every textfield you need a multilingual string access it – and now comes the important part – via the very cool XMLShortcuts component by Arul Kumaran. Just put the component into your library and select the xml nodes by their tag name (no more firstChild.firstChild.childNodes bla…), e.g.: language.about.headline._label (even mixed node access is possible: language.firstChild.headline._label). The latest blog entries in Arul’s blog explain in detail how it works, what the advantages are regarding other components/approaches for accessing xml nodes easily etc.. You don’t want to miss XMLShortcuts when working with xml files…But with ActionScript 3 and E4X everything is also going great, right? ;-)

Filed under: Flex/AS3

One Response to “Dealing with multilingual content and mx.lang.Locale”

  1. chichilatte says:

    wowo cool. any chance you could make your modified mx class public? I’ve been working on the same thing, and resorted to building my own language system., ie. linking textfield labels to an xliff document. Mine works, but yours seems much more elegant!

Add a comment

Follow comments to this post by subscribing to the comment feed.