March 23, 2005

Open source translation tools

Author: Mayank Sharma

Do you speak open source, but English is not your native language? You can turn to a growing list of user-friendly tools for translators, including specialized graphical tools like poEdit, KBabel, and Gtranslator.

Most of the popular open source applications use the GNU gettext framework, which specifies that applications store the strings of words they use (for constructing the interface, error messages, documentation, etc.) in portable object (PO) files. When a PO file does not have any translations, it is called a POT (PO template) file.

To convert the strings stored in PO files from English into a local language you need a font and a keyboard layout for your chosen language. This article shows how to install these in Fedora Core 2. You also need a Unicode-enabled browser (such as Konqueror, Mozilla, or Firefox), and of course the translation applications.

Once you have all your tools in place, see the KDE documentation translation page for more information on how to translate documentation using PO files.

Translating an application is a little more complex than simply translating its documentation. GNOME,, KDE, and Mozilla/Firefox have their own separate procedures for translation. requires its GSI (GutSchmidt's Interface) files to be translated, while Mozilla and Firefox have their translatable messages in .dtd and .properties files. One way to translate these applications is to convert everything into PO files and then use one of the PO editing tools.

SourceForge's Translation Project has various tools that can assist you as a translator. The oo2po and po2oo tools convert files from the GSI format to PO format and, after translation, back to GSI. The moz2po and po2moz perform similar functions with the Mozilla English Language Packs.

However, "we've encountered problems using oo2po and po2oo," says Kartik Mistry, developer/translator for the Utkarsh Gujarati Project. "So we directly edited the GSI file -- an intensive task for the team, as the GSI file's format is very sensitive; even one wrong space makes your compilation fail or gives you German strings. moz2po works fine, but po2moz has problems and generates extra strings. But the good thing is that the Translation Project team is working hard and with every new release the tools are improving."

Where do you ask translation questions?
While there are lots of localized software and plenty of content available, what seems to be missing is a good multilingual forum board like LinuxQuestions.

The best and quickest way to translate PO files is to use KBabel. KBabel can do a rough translation using a glossary file, which you can generate using KBabeldict. This accelerates the process of translation by reducing the number of strings that need to be translated. Although many localization projects don't have them, KBabel can use dictionaries and spell-check your translations.

A useful tool bundled with KBabel is the CatalogManager. By comparing the POT files with the translated PO files, it gives you a quick status overview of how many files have been translated and to what extent.

The GNOME PO Translator Guide gives you a good idea on how projects like GNOME deal with PO files. If you are planning to pass around your PO files, make sure they are Unicode-encoded. With computers becoming popular in non-English-speaking areas, Unicode has been accepted as the standard for rendering non-English (as well as English) scripts. There are various Unicode Transformation Formats (UTF) in which you can store Unicode data.


As the online collaborative model spreads into the field of localization, new Web-based translation tools like Pootle and Rosetta make the life of a translator a lot easier by offloading the requirements of "offline" tools like KBabel.

But once you have the right setup (fonts, keyboard) and the inclination to localize, there are plenty of things you can do apart from translating.

Mayank Sharma is a freelance technology writer and FLOSS migration consultant in New Delhi, India.

Click Here!