Localization Series: Internationalization

codeBy Rick Dudgeon

What is internationalization? If you do a search of the web, you’ll find that internationalization, or i18n, is often used interchangeably with localization (L10n). You might view them as two parts of the same process. They are really two distinct processes, requiring different skill sets. Localization is typically done by translators, while internationalization is normally done by software engineers.

You might compare this to the example of a gourmet kitchen. It takes a very different set of skills to create a gourmet kitchen than it does to create a gourmet meal. But without the kitchen, there can be no meal. Similarly, without internationalization, there can be no localization. Localization cannot begin until the internationalization is complete. Just as many kinds of meals can be created in a well equipped kitchen, localization can be done into many different languages, while the internationalization only needs to be done once.

I can take a Word document written in English and hand it to an experienced English-to-French translator, and they can give back a Word document with my content translated into French. I didn’t have to “internationalize” anything. When do we need to do internationalization? Why do we need it?

Consider a computer program. If I hand you a computer program, and you don’t have experience in writing software, it will mostly look like nonsense to you. You might wish for a Java to English translator. What if I then hand the program to a Greek translator and say I’d like this translated to Greek, what’s going to happen? They might cry out “It’s Greek to me!” (Sorry, I couldn’t resist.) Most programming languages are created using an instruction set of mostly English words. What happens if our translator accepts the document and translates all of the English to Greek? Then the program won’t work. Why not? The computer doesn’t understand Greek. It understands Java. We don’t want to translate the instructions to the computer, just the content that the end user will see.

Now suppose we’re lucky enough to find a translator who also has experience with software and knows Greek, English and Java. They will be able to recognize which strings are computer instructions and which are output that will be seen by the end user. Then they can translate only the end-user output. Mission accomplished, right? Probably not.

The problem here is that we now have two programs, one for English users and one for Greek users. What happens if we discover we have a bug in the program. (This is not hypothetical. We will  find a bug in the program.) Now what? We need to fix both programs. Who does this? Does the same programmer change both programs? Does the original programmer change the English version and the English/Greek/Java wizard change the Greek version? We’ve now doubled our work. Not only do we need to modify two computer programs, we now need to test those changes in both languages. What happens if our software is available in twelve languages? This becomes expensive fast.

This is where internationalization becomes important. The first responsibility of the i18n engineer is to go through the code and separate all of the computer code from the text strings, words or phrases, that are translatable. These strings are then moved to resource files. The resource file can then be sent to a translator who will localize these words or phrases into the target language. Meanwhile, back in the computer code, the i18n engineer will modify the computer code so that, instead of outputting the original English string, it will look up the correct phrase in the right resource file so that the end user can see the right content in their preferred language.

This is the primary function of i18n engineers, but there are other issues that they need to handle. For example, they need to properly handle conversions from left-to-right languages like English and Spanish to right-to-left languages like Arabic and Hebrew. For example, a menu that used to be on the left needs to be on the right. They also need to handle things like number and date formats that can differ, and even currency conversions.

When do we need internationalization? We’ve used a software program as an example, but this is not limited to software. Video games need to be localized. (Ok. I know. Video games are software too.) Perhaps the most common use for internationalization these days is for websites. Even printed material may be internationalized if it is being produced in multiple languages but you want to maintain the same look and feel in each language.