I heard that TsiLang components are good, but you are looking at an inplace solution ...
I used the GNU gettext for Delphi , which does exactly what you need, it loads translations from a text file and replaces the text in your components. It even has a pas / dfm scanner to automatically create an English translation file.
You can also automatically change the source code of pascal to introduce the gettext procedure in the place of your static string. If I'm not mistaken, it just adds an underline function to it, as shown below.
ShowMessage('Hello'); // before ShowMessage(_('Hello')); // after
I must say that two years have passed since the last time I used this method.
One thing will remain problematic, Delphi components are not included in Unicode (D2009 fixes this), so when you do not change components, you will still have limited support for other languages.
source share