Du erstellst eine .rc-Datei (Notepad, ...), in der du eine Stringliste abbildest.
Code:
STRINGTABLE {
// LID_ABOUT
1, "Software Name\nCopyright ..."
// LID_ABOUT_TECHNOLOGIES
2, "Verwendete Technologien"
...
// LID_SOME_OTHER_TEXT
12345, "Testtext %s %d\n"
}
Die Datei jagst du durch den Borland Resource Compiler (BRCC32) und er erstellt dir daraus eine .res. Diese .res linkst du in ein library-Projekt. Das ist dann die Sprach-
DLL, zB wird aus german.dpr dann german.dll.
Dazu hab ich mir ein Tool geschrieben, was durch diese Dateien parsed, mir die Einträge nach LIDs sortiert und aus den LID_...-Kommentaren eine LanguageIds.pas erstellt, die diese als CONSTs hinterlegt hat.
Delphi-Quellcode:
unit LanguageIds;
interface
const
LID_ABOUT = 1;
LID_ABOUT_TECHNOLOGIES = 2;
...
LID_SOME_OTHER_TEXT = 12345;
...
implementation
end.
Dazu eine Klasse, die die entsprechende
DLL per LoadLibrary lädt und mir durch eine Funktion "GetString" die entsprechende LID aus der
DLL als String lädt und zurückliefert.
Delphi-Quellcode:
// ...
MessageDlg (Language.GetString (LID_ABOUT), ...);
Dazu kam noch ein tabellenähnliches Übersetzungstool, wo man eine Basissprache (zB Deutsch) links in der ersten Spalte hat und beliebig viele Sprachen rechts hinzufügen und recht komfortabel bearbeiten kann.
Das Borland Teil war uns zu kompliziert und unflexibel, vorallem wenn man Übersetzer hat, die 1) im Ausland sind und 2) sonst - ausser Texte schreiben - nicht viel mit Computern am Hut haben.
Fahren mit der Lösung schon einige Jahre ziemlich gut. Bisher keine Probleme gehabt.