| By Jeff Tapper | Article Rating: |
|
| May 13, 2007 10:00 AM EDT | Reads: |
25,485 |
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,485
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."
- Ulitzer.com Named Exclusive "New Media" Sponsor of Cloud Computing Conference & Expo
- Adobe’s Aiming ColdFusion at Multiple Clouds
- Cloud Computing Journal: Adobe to Deliver ColdFusion in the Cloud
- Adobe Unveils LiveCycle Enterprise Suite 2 for Deployment in the Cloud
- Adobe Flex Developer Earns $100K in New York City
- Adobe May Cooperate with Apple to Transplant Flash Player to iPhone
- Ph.D. in Twitter Anyone?
- Eolas Sues the Internet
- Adobe LiveCycle Enterprise Suite 2 for Cloud Computing
- Adobe Betas Target RIAs and Cloud Computing
- Special Report on the Emerging Cloud Computing Trend
- Adobe Cans Another 9% of its Workforce
- My Thoughts on Ulitzer
- Ulitzer.com Named Exclusive "New Media" Sponsor of Cloud Computing Conference & Expo
- Ulitzer Live! New Media Conference & Expo
- Adobe’s Aiming ColdFusion at Multiple Clouds
- Eval JavaScript in a Global Context
- Fig Leaf Software to Exhibit at Government IT Conference & Expo
- Cloud Executives Feature on Cloud Computing Expo Power Panel
- Software Flexibility in the Cloud - Part 4 of 5
- Cloud Computing Journal: Adobe to Deliver ColdFusion in the Cloud
- Is Microsoft as Free as Open Source?
- Adobe Reader Sued
- Adobe Unveils LiveCycle Enterprise Suite 2 for Deployment in the Cloud
- Where Are RIA Technologies Headed in 2008?
- Cover Story: How to Increase the Frame Rates of Your Flash Movies
- AJAX World RIA Conference & Expo Kicks Off in New York City
- Your First Adobe Flex Application with a ColdFusion Backend
- Adobe Flex 2: Advanced DataGrid
- i-Technology Blog: Death-Knell For "Rich Media? Hardly!
- Adobe/Macromedia - Microsoft, Look Out!
- How To Create a Photo Slide Show ...
- Adobe Flex Interface Customization - Themes, Styles, Skins
- Personal Branding Checklist
- Has the Technology Bounceback Begun?
- "Real-World Flex" by Adobe's Christophe Coenraets




































