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 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.
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,
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
On the plus side of working with POEditor:
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.