![]() |
Sprachdatei beim Compilieren mit einbinden
Hallöchen,
ich möchte gerne (just for fun) Sprachdateien für mein Programm anlegen, in denen die ganzen Komponenten-Captions gespeichert werden sollen und beim Compilieren soll das dann ausgelesen und gespeichert werden. Ich schätze mal, dass eine .res-Datei die richtige Lösung ist, aber ich kenne mich da nicht so aus. Die Dateien sollen so aussehen:
Delphi-Quellcode:
So in der Art ;-) Die Dateien sollen aber nicht mitgeliefert werden müssen mit der exe, müssen also beim Compilieren mit eingebunden werden.
//Datei: deutsch.lang (oder so)
lblHallo.Caption=Hallo lblTschuess.Caption=Ade btnStart.Caption=Start ... //Datei: english.lang (oder so) lblHallo.Caption=Hello lblTschuess.Caption=Bye ... Liebe Grüße ... |
Re: Sprachdatei beim Compilieren mit einbinden
Hallo Aike,
ich habe das bei einem meiner (kleineren) Projekte so gelöst: 1. Für jede Sprache eine Ressource erstellen Beispiel:
Delphi-Quellcode:
Speichern unter z.B. DEUTSCH.RS und danach mit brcc32 compilieren
STRINGTABLE
{ 100, "&Datei" 101, "&Beenden" 102, "&Info über" ... usw. } Wie gesagt, das gleiche für alle anderen Sprachen. 2. Für jede Sprache DLL erstellen: Beispiel:
Delphi-Quellcode:
Speichern unter z.B. deutsch.dpr, danach compilieren
library deutsch;
uses SysUtils; {$R DEUTSCH.RES} begin end. Wiederum für jede Sprache ... 3. Einbinden in dein Programm:
Delphi-Quellcode:
Ich habe das Ganze mal irgendwann irgendwo gefunden und auf meine Bedürfnisse angepasst - funktioniert einwandfrei.
private
sDLLName: string; hDLL: THandle; function GetStringFromRes(iID: integer): string; procedure SprachAuswahl; public end; implementation {$R *.dfm} function TForm1.GetStringFromRes(iID: integer): string; var iCnt: integer; szText: array[0..29] of char; begin iCnt := LoadString(hDLL, iID, szText, SizeOf(szText)-1); if iCnt > 0 then GetStringFromRes := StrPas(szText) else GetStringFromRes := 'Kein Eintrag'; end; procedure TForm1.SprachAuswahl; begin // bei Sprache deutsch: SDLLName := 'DEUTSCH.DLL' // bei Sprache englisch z.B.: SDLLName := 'ENGLISH.DLL' hDLL := LoadLibrary(PChar(sDLLName)); // ab hier zuordnen, z.B.: Datei.Caption := GetStringFromRes(100); Beenden.Caption := GetStringFromRes(101); // usw. end; // Zum Schluss (ev. im FormDestroy) nicht vergessen, die DLL wieder entladen if hDLL <> 0 then FreeLibrary(hDLL); mfg Herbert |
Re: Sprachdatei beim Compilieren mit einbinden
Wow, das sieht ja super aus, aber muss man dann nicht die dll mitliefern?
|
Re: Sprachdatei beim Compilieren mit einbinden
Ja, die DLL's müssen mitgeliefert werden, aber das sollte ja keine Probleme bereiten.
mfg Herbert |
Re: Sprachdatei beim Compilieren mit einbinden
Bäh, das ist aber doof ;-) Das macht die Sache eher komplizierter :gruebel: Eigentlich wollte ich die Ressource-Dateien schon so nutzen, dass es in die exe mit eingebunden wird.
|
Re: Sprachdatei beim Compilieren mit einbinden
Müsste das nicht so gehen? Ich bin mir nicht sicher, bin nicht so Fit in sachen compiler-direktiven^^
Delphi-Quellcode:
implementation
{$DEFINE 'lang_de'} // Auskommentieren für englisches Build {$R *.dfm} {$IFDEF lang_de} // Deutsch {$R DEUTSCH.RES} {$ELSE} // Englisch {$R ENGLISCH.RES} {$ENDIF} |
Re: Sprachdatei beim Compilieren mit einbinden
Also die Anführungsstriche bei "lang_de" müssen weg, aber es funktioniert dann immer noch nicht. Er meint, ich hätte duplicate ressource(s). *Seufz* Und wenn ich schon bei Beginn der implemenation die Sprache angeben muss, kann ich ja nachträglich gar nicht mehr die Sprache ändern, oder?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz