Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Sprachdatei beim Compilieren mit einbinden (https://www.delphipraxis.net/91528-sprachdatei-beim-compilieren-mit-einbinden.html)

Aike 6. Mai 2007 17:21


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:
//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
...
So in der Art ;-) Die Dateien sollen aber nicht mitgeliefert werden müssen mit der exe, müssen also beim Compilieren mit eingebunden werden.

Liebe Grüße ...

hsbc 6. Mai 2007 18:00

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:
   STRINGTABLE
   {
   100, "&Datei"
   101, "&Beenden"
   102, "&Info über"
   ... usw.
   }
Speichern unter z.B. DEUTSCH.RS und danach mit brcc32 compilieren
Wie gesagt, das gleiche für alle anderen Sprachen.

2. Für jede Sprache DLL erstellen:

Beispiel:

Delphi-Quellcode:
   library deutsch;

   uses
     SysUtils;

   {$R DEUTSCH.RES}

   begin
   end.
Speichern unter z.B. deutsch.dpr, danach compilieren
Wiederum für jede Sprache ...

3. Einbinden in dein Programm:

Delphi-Quellcode:
   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);
Ich habe das Ganze mal irgendwann irgendwo gefunden und auf meine Bedürfnisse angepasst - funktioniert einwandfrei.

mfg
Herbert

Aike 6. Mai 2007 18:32

Re: Sprachdatei beim Compilieren mit einbinden
 
Wow, das sieht ja super aus, aber muss man dann nicht die dll mitliefern?

hsbc 6. Mai 2007 18:40

Re: Sprachdatei beim Compilieren mit einbinden
 
Ja, die DLL's müssen mitgeliefert werden, aber das sollte ja keine Probleme bereiten.

mfg
Herbert

Aike 6. Mai 2007 18:49

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.

Namenloser 6. Mai 2007 19:35

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}

Aike 7. Mai 2007 20:23

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 16:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz