POEditor is a suite of localization tools which supports about 20 file formats. It gives translators a common and straightforward interface where they can provide translations in a given language to match the text in the "main" language.

POEditor lets you translate up to a thousand text strings for free, which is a good amount for trying out its workflow. Although it offers commercial licenses, it also provides unlimited free licenses to open-source projects: "If you have a project with an OSI-approved license that you want to localize for free, go to the project's Settings and file a request for an Open Source Project."

Apache Tomcat's process

Apache Tomcat uses POEditor to localize its log messages and other material. Each revision involves as many as 3050 terms.

PMC member Mark Thomas wrote up this description of their localization workflow:

Tomcat is Java based and we have l18n files per Java package. The primary language is English. New terms and the associated English text are added as part of our normal commit process.

Periodically (typically once a month just before we tag a release) I run a utility we wrote that takes the per package files and converts them to a single file for each language. We then use the English export file to update terms and the associated English translations to POEditor.

Meanwhile our volunteers update the translations in other languages using POEditor, adding missing translations and improving others.

I export translations for one language at a time from POEditor and then run an import utility we write that takes the single export file generated from POEditor and converts it into the per Java package files we use in Tomcat. I review the changes before the commit mainly to check nothing obvious has gone wrong.

The export/import utilities handle all languages. We are just careful which ones we use after exporting / update before importing. For example, when we were setting this up, we used the export utility to export all the translations from Tomcat so we could import them into POEditor.

Back-porting translations

Tomcat currently maintains 4 major versions in parallel. 10.0.x, 9.0.x, 8.5.x and 7.0.x. We have also developed a mechanism for back-porting translations.

There are separate processes for 10.0.x->9.0.x, 9.0.x->8.5.x, and 8.5.x to 7.0.x. I have configurations set up in Eclipse so I can just click a button to run each of these,

  1. First we back-port the English translations. For every term in the current version, if the same term exists in the current version and the previous version, the text for the term in the previous version is updated.
  2. We review the changes before commit because there are some deliberate differences. We could add exclusions to the code but I haven't yet because there are only a few and it would take much longer to code than the time saved.
  3. Then we back-port the translations. For every term in the current version, if the term exists in the previous version and the English text is the same, all translations for that term are copied from the current version to the previous version - overwriting any translations that might already be present.

Utilities for back-porting from 10.0.x -> 9.0.x:

and for importing them in 9.0.x

With similar for 9.0.x -> 8.5.x and 8.5.x to 7.0.x

POEditor user experience

On the plus side of working with POEditor:

  • The app has a low barrier to entry (anyone can create an account).
  • The UI is easy to use.
  • Integration into the Tomcact process works okay once we wrote the import/export utils.

On the minus side, if you need to undo a bulk-delete, it is hard to tell what do to and what the effect will be.