Better Translation Manager
https://bitbucket.org/anders_melander/better-translation-manager
The Better Translation Manager (BTM) is a replacement for the Delphi Translation Manager a.k.a. the Integrated Translation Environment (ITE) and External Translation Manager (ETM).
Why is it better? Well, for one thing, it's free but more important; It actually works - unlike the ITE/ETM.
Why?
The standard Translation Manager that ships with Delphi today was originally an individual product known as the Borland Translation Suite. With Delphi 5 it became a part of the enterprise edition.
The Borland Translation Suite showed great promise but unfortunately it never evolved from its roots as an external tool and has always been hampered by severe bugs that made it completely unusable in practice. As a result nobody uses it. This can be witnessed by the plethora of homegrown and commercial alternatives.
The great benefit of the standard translation system is that it just works (this is the system itself I'm talking about, not the tools. The tools suck). Apart from the requirement that you must use resourcestrings you don't need to do anything special when writing your code. At run time you just place the compiled resource modules in the same folder as your application and the Delphi Run Time Library automatically takes care of loading and using the translations based on the current Windows user interface language.
Anyway, since Embarcadero has now finally admitted that they are never going to fix the Delphi Translation Manager and instead recommend that we find alternative solutions, I decided that it was time I solved this little problem once and for all.
The core functionality of the Better Translation Manager was written in two weeks during my summer vacation in Italy 2019. Amazing what you can do with a little pasta!
Features
Does not require any changes to the source code of the application being translated.
Works with the existing standard Delphi localization system.
Translates resourcestrings and all strings in forms regardless of any 3rd party components used.
Works on compiled application. Source code is never used.
Generates localized binary resource modules (resource DLLs). Does not use an external compiler.
Can import existing translations from compiled application and resource modules or from XLIFF localization source files (dfn, rcn files).
Read and save TMX and TBX translation memory files.
Import Translation Memory from TMX (Translation Memory eXchange), TBX (TermBase eXchange), Microsoft Glossary and CSV.
Machine Translation using Translation Memory, Microsoft Translation Service or Microsoft Terminology Service.
Forms, Components, Types and Values that should be ignored can be specified in a Stop List.
Translations are Spell Checked.
Validation Rules to catch common translation mistakes.
Supports Right To Left (RTL) editing based on translation language.
Translation project is stored in a single XML file.
Command line interface for use in automated build systems.
Fast! Refreshing a large project typically takes less than a second vs. many minutes with the ITE/ETM.
Supports all Unicode versions of Delphi (i.e. Delphi 9 and later).
Resource modules contain the version resource of the source application.
What it doesn't do
There's one task that BTM, by design, doesn't attempt to solve: Localizing the placement and size of controls.
Since it has been my experience that it is a far better idea to design the user interface in such a way that the layout automatically accommodates changes in font- and text size and shorter/longer texts due to translation, I decided from the start that I would not be supporting localization of size and position of controls. This also relieved me of having to create a run time form designer, supporting 3rd party controls visually (something that nobody so far has managed to find a foolproof solution to) and deciding what individual properties constitutes size/position values.
Instead I just localize all string values - and only string values.
But wait... There's More!
Yup, you not only get this little wonder for free. You get the full source code too.
Grab it at the repository linked at top. More details at the repository.
Enjoy
/ Anders Melander