| By Jeff Tapper | Article Rating: |
|
| May 13, 2007 10:00 AM EDT | Reads: |
25,372 |
One of the many features available in Flex 2.0 is a ResourceBundle class, which allows for a standardized approach for internationalizing applications. Many recent projects of mine have required that applications be built that can easily be ported to other languages. Traditionally, I've used a series of XML files for this, one for each of the various languages that need to be supported. This strategy is still viable, and I still use it on some of my projects. However, I've recently discovered a different approach, which is available natively in Flex. Flex provides a ResourceBundle class, which allows you to set up your text in properties files (the identical structure that you would use for internationalizing Java applications). These properties files are arranged in a folder structure, relating to the language and country, so the properties file for US English would be in a folder called en_US, the file for the UK would be en_UK, while the French would be in fr_FR. The structure of the files is very simple; they look like this:
hello = Hello World
welcome = Welcome!
Or, in the French version:
hello = Bonjour Monde
welcome = Bienvenue
To use these in an application, you have two options: you can use the @Resource command each time you need a value, or you can declare a variable for the ResourceBundle and
use the getString(), getNumber(), getBoolean(), etc., methods. In Listing 1, you can see both being used. In this example, the top label uses the @Resource directive to specifically pull the hello key from the helloWorld bundle. If the application is compiled for en_US, that key will show "Hello World," compile the same app for fr_FR, and read "Bonjour Monde."
The remaining trick is to tell the compiler which language to use, and where to find the files. You can do this from the command line like this:
mxmlc -locale en_UK -sp ../locales/{locale} -o HelloWorld_en_UK.swf I18N_HelloWorld.mxml
mxmlc -locale fr_FR -sp ../locales/{locale} -o HelloWorld_fr_FR.swf I18N_HelloWorld.mxml
Or, you can specifiy compiler arguments in Flex Builder:
-locale en_US -sp ../locales/{locale}
Now let's explore how you can use XML files as an alternative to this. We will explore the use of multiple instances of the ResourceBundle class to allow for runtime switching of locales.
As we have already discussed, the native use of the ResourceBundle class requires separate compiled SWFs for each language. This is not always desirable, and there are times when you may want to allow for switching of languages at runtime. One strategy I've used successfully for this is to trick the Flex compiler and have several different properties in the same locale folder, and to create separate instances of the ResourceBundle class for each of them. This way, it's a fairly simple process to determine what the current locale is, and to pull the labels from that ResourceBundle.
To start, I took three properties files and placed them in a single directory. Listing 2 is a simple example of how to get it working.
I named each file based on the language it was there to support (helloWorld_fr.properties, helloWorld_uk.properties, helloWorld_us.properties). Notice that there is ResourceBundle instance for each of the three files. I've also added some simple functions to get the data from these files (geti18nText, geti18nDate). Keep in mind, this is a simplistic example. In real world apps, I tend to have a singleton responsible for embedding and retrieving the data from the files. But, even in this simple case, you can see the power of it - switching the selected language in the combo box instantly translates the labels and dates to the appropriate format.
Remember to add a compiler argument to specify the proper directory for the locale files. In my case, all three files were in a locales/multi directory, so I added the argument:
-sp ../locales/multi
Look for the follow-up parts to this article in the next issue of Web Developer's & Designer's Journal.
Published May 13, 2007 Reads 25,372
Copyright © 2007 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Jeff Tapper
Jeff Tapper, co-founder of Tapper, Nimer and Associates, is an Editorial Board member of Web Developer's & Designer's Journal. He has been developing Internet-based applications since 1995, for a myriad of clients including Toys R Us, IBM, Allaire, Dow Jones, American Express, M&T Bank, Verizon, Allied Office Supplies, and many others. As an Instructor, he is certified to teach all of Adobe's courses on Flex, ColdFusion and Flash development. He has worked as author and technical editor for several books on technologies including Flex, Flash and ColdFusion, such as "Object Oriented Programming with ActionScript 2.0", and "Flex 2 Training from the Source."
- Practical Approaches for Optimizing Website Performance
- SQL Anywhere Server and AJAX
- The Difference Between Web Hosting and Cloud Computing
- Ajax in RichFaces 3.3, JSF 2 and RichFaces 4
- Cloud Computing on Gartner's Top 10 List and SYS-CON Events' 2010 Calendar
- IBM Hardware Chief, Intel VC Exec Arrested in Insider Trading Scam
- US Post Office Hops a Ride on NetSuite’s Cloud
- Gang of Four Creates Cloud BI Stack
- Tactical Cloud Computing Panel at 1st Annual GovIT Expo
- Confessions of a Ulitzer Addict
- AJAX World RIA Conference & Expo Kicks Off in New York City
- An Introduction to Abbot
- What is Web 3.0?
- AJAXWorld RIA Conference & Expo 2009 West: Call for Papers
- Interviewing Java Developers With Tears in My Eyes
- Adobe Enters Cloud Computing with LiveCycle
- REA Is Where RIA Becomes the Norm
- RIAs for Web 3.0 Using the Microsoft Platform
- Practical Approaches for Optimizing Website Performance
- Social Media Terrorists
- Building a Drag-and-Drop Shopping Cart with AJAX
- What Is AJAX?
- Google Maps! AJAX-Style Web Development Using ASP.NET
- Flashback to January 2006: Exclusive SYS-CON.TV Interviews on "OpenAjax Alliance" Announcement
- AJAXWorld Conference & Expo to Take Place October 2-4, 2006, at the Santa Clara Convention Center, California
- AJAX Sponsor Webcasts Are Now Available at AJAXWorld Website
- How and Why AJAX, Not Java, Became the Favored Technology for Rich Internet Applications
- "Real-World AJAX" One-Day Seminar Arrives in Silicon Valley
- AJAXWorld University Announces AJAX Developer Bootcamp
- AJAX Support In JadeLiquid WebRenderer v3.1

































