When I have a look to current software developments and have in my mind the current process of a world becoming smaller and smaller, I start to wonder, why there is no more attention drawn to internationalization (I18n) and localization (L10n).
Why should be software be internationalized?
As long as their are only engineers and managers using my software, it might be OK to assume that my potential users are speaking English. On the opposite, my experience is that especially in Asian countries managers and engineers are not speaking very well. Some of the countries are not open for global business long enough that their ‘older’ managers and engineers had no chance to learn and train English a long time. Young managers and engineers are to be expected to be better in speaking English, but as soon as one knows the significant differences in eastern and western languages, one knows, that there will still be a significant amount of people not speaking English so well. I know from experience what it means to lean a sino-tibetean language by learning Vietnamese myself.
It is even worse for software used by operators and fabrication staff. Imagine a MES system not localized to the language of the country. Even in Germany operators are not well educated in English. Should I prefer an English speaking MES system or a German speaking one? If the price, the functionality and the performance are almost equal, I prefer a German speaking system. If I would purchase the software for an international working cooperation, I would invest in multi-lingual software.
If I would develop software for a global market, I need to have to pay attention to meet the demand of as many people as possible to increase the number of potential customers to increase my sales. One of the easiest things to do is to present cutting edge software to customers in their mother tongue and physical units and time presentation in a way the customers are used to. If I worked in Vietnam, I would like to be able to switch my computer from Vietnamese to English (or even better: German). I would have a chance to use my computer in a more efficient way, to make less mistakes and to deal with the software in a more reliable way. I guess, this is also valid for a lot more people.
“Usability” is also a quality requirement. Have a look to PureSol Technologies website for some more information.The positively influenced characteristics are “Understandability”, “Learn ability” and “Operable”. For quality focused software projects this is also a factor to take into account.
Simple Conclusion: Do it
In current software developments we should always start projects with an additional focus on I18n and L10n. The additional time and work to enable my software to change the language and the output units is not that high. Using good frameworks for that, it’s very easy to achieve.
A simple framework example: I18n4Java
Let’s have a look to I18n4Java. It’s a small framework I created for my own applications. It’s stable and usable, but not very user friendly, yet. The L10n functionality is taken from the Java API. It’s a very good and reliable framework. Only the suggestopm for I18n implementation I did not like. The SUN recommendation can be found at http://download.oracle.com/javase/tutorial/i18n. The basic information is: Put all messages in property files and change them in reference to the language needed to be displayed.
This approach has some issues:
- The message to be display is separated from the source code. I need to look into additional files to find what is actually display. When I need to change messages, I need to open additional files.
- The situation is worse as soon as I need message with parameters. Without seeing the actual message, I do not know in which order I need to put the parameters into the message.
- I need extra codes for opening the properties files, additional error handling during loading errors and extra code to read the messages.
This limitations are overcome by I18n4Java. Additionally, it is very easy to use in code.
The only things to do is to add a translator to a class which needs I18n. In each class one just needs to create a Translator object:
private static final Translator translator = Translator.getTranslator(ClassName.class);
Afterwards within the class I only need to put every message to be displayed in to the translator and to show the translated message:
JMenuItem menuItem = new JMenuItem(translator.i18n("Menu Item Name"));
The message is then automatically translated into the language selected with
and if an translation file is found for the selected language.
That’s all what is to be done to enable I18n in Java programmed software. The rest is a simple configuration file to set the language needed. I18n4Java automatically sets itself to the currently set OS locale and tries to translate everything in the language the OS is set to.