Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie wechsele ich die Sprache zur Laufzeit? (https://www.delphipraxis.net/210257-wie-wechsele-ich-die-sprache-zur-laufzeit.html)

softtouch 25. Mär 2022 10:51

Wie wechsele ich die Sprache zur Laufzeit?
 
Ich habe mit Better Translation Manager eine .DEU resource erzeugt.
Wie bekomme ich Delphi dazu, diese zur Laufzeit zu verwenden, sodass ich verschiedene Sprachen ausliefern kann?
Was ich möchte, ist die Sprache während der Laufzeit umzuschalten, via Menu zum Beispiel.

Renate Schaaf 25. Mär 2022 13:35

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Wenn Du im englischen Forum nachfragst, antwortet Dir sicher Anders direkt.

Aber ich kann Dir zeigen, wie ich im Moment Sprachen teste. Meiner Erfahrung nach kann man die Sprach-Resource nur im Quellprogramm nach Application.Initialize laden. Sowie das .dfm eingelesen ist, geht das nicht mehr, weil in der Resource ja auch die übersetzten Formulare enthalten sind, denke ich mal. Wenn im Hauptprogramm die Sprache geändert wird, erfordert das einen Neustart.

Ich löse das im Moment per ini-file, wobei ich schamlos aus Anders source code kopiert habe (Entwicklungssprache ist bei mir Deutsch):

Quellprogramm der app:

Delphi-Quellcode:
var
  h: integer;
  ini: TMemInifile;
  appfolder, Lang: string;

function SetResourceHInstance(NewInstance: HModule): HModule;
var
  CurModule: PLibModule;
begin
  CurModule := LibModuleList;
  Result := 0;
  while (CurModule <> nil) do
  begin
    if CurModule.Instance = HInstance then
    begin
      if (CurModule.ResInstance <> CurModule.Instance) then
        FreeLibrary(CurModule.ResInstance);
      CurModule.ResInstance := NewInstance;
      Result := NewInstance;
      Exit;
    end;
    CurModule := CurModule.Next;
  end;
end;

begin
  Application.Initialize;
  appfolder := GetSpecialFolderLocation(CSIDL_APPDATA); //GetSpecialFolderLocation ist aus Jedi, geht aber inzwischen moderner, hab ich aber vergessen.
  appfolder := appfolder + '\MyApp';
  ini := TMemInifile.Create(appfolder + '\Settings.ini');
  Lang := ini.ReadString('Settings', 'Language', 'DEU');
  ini.free;
  if Lang <> 'DEU' then
  begin
    h := LoadLibraryEx(PChar('MyApp.ENU'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if h <> 0 then
      SetResourceHInstance(h);
{$IF RTLVersion >= 34}
    ResStringCleanupCache;
{$ENDIF}
  end;

....
Im Hauptprogramm habe ich eine Combobox, über die man die Sprache für den Neustart wählen kann. Im OnChange schreibe ich die neue Sprache ins ini-file und sag dem Benutzer, dass er jetzt das Programm neu starten soll.

Ist nicht perfekt, aber zum Testen erstmal geeignet.

Renate

Sinspin 25. Mär 2022 17:57

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Wir verwenden was kommerzielles von SiComponents. Geht wunderbar zur Laufzeit.
Ist halt eine Komponente auf der Form die für alle zu übersetzenden Captions/Text/etc auf der Form, die Versionen in jeder Sprache speichert. Beim Umschalten wird dann halt einfach alles ersetzt.
Die Übersetzungen können auf dem Form selber oder als externe Datei vorliegen.

Sowas kann man sich auch recht einfach selber schreiben.

zeras 25. Mär 2022 18:27

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Zitat:

Zitat von Sinspin (Beitrag 1503930)
Wir verwenden was kommerzielles von SiComponents. Geht wunderbar zur Laufzeit.

Ich nutze auch diese Komponente und finde die Umsetzung auch sehr gut.

Zitat:

Zitat von Sinspin (Beitrag 1503930)
Sowas kann man sich auch recht einfach selber schreiben.

Ja, kann man. Wenn man aber alles berücksichtigt, ist das meines Erachtens schon ein größeres Projekt.

Rolf Frei 25. Mär 2022 18:35

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Zitat:

Zitat von softtouch (Beitrag 1503918)
Ich habe mit Better Translation Manager eine .DEU resource erzeugt.
Wie bekomme ich Delphi dazu, diese zur Laufzeit zu verwenden, sodass ich verschiedene Sprachen ausliefern kann?
Was ich möchte, ist die Sprache während der Laufzeit umzuschalten, via Menu zum Beispiel.

Einfach die Datei im gleichen Ordner ablegegn wie die Exe und alles passiert automatisch. Aber du solltest nicht DEU nutzen sondern die übergelagerte DE. Diese gilt für alle deustchsprachigen Gebiete. DEU ist nur für Deutsch (Deutschland). DE gilt auch für die Schweiz (DES) und Österreich(DEA?). Wenn du in diese Länder die DEU Sprachdateien lieferst, wird deine Anwendung in den deutschen Subsprachen nicht auf deutsch angezeigt.

Steku 25. Mär 2022 18:40

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Oder mal hier schauen...

https://en.delphipraxis.net/topic/18...ager-released/

Viele Grüße
Steku

softtouch 25. Mär 2022 20:00

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1503933)
Zitat:

Zitat von softtouch (Beitrag 1503918)
Ich habe mit Better Translation Manager eine .DEU resource erzeugt.
Wie bekomme ich Delphi dazu, diese zur Laufzeit zu verwenden, sodass ich verschiedene Sprachen ausliefern kann?
Was ich möchte, ist die Sprache während der Laufzeit umzuschalten, via Menu zum Beispiel.

Einfach die Datei im gleichen Ordner ablegegn wie die Exe und alles passiert automatisch. Aber du solltest nicht DEU nutzen sondern die übergelagerte DE. Diese gilt für alle deustchsprachigen Gebiete. DEU ist nur für Deutsch (Deutschland). DE gilt auch für die Schweiz (DES) und Österreich(DEA?). Wenn du in diese Länder die DEU Sprachdateien lieferst, wird deine Anwendung in den deutschen Subsprachen nicht auf deutsch angezeigt.

Das mache ich ja, es ändert sich aber nichts, die resource wird nicht verwendet. Ich habe DEU, DE und vieles mehr versucht, es bleibt alles Englisch.
Mein Windows ist komplett auf Englisch, auch die Region etc., das wird auch irgendwie von BTM erkannt. Die .DEU wird einwandfrei mit meiner Übersetzung erzeugt. Dann stelle ich Windows komplett auf Deutsch, und die .DEU sollte geladen werden, wird aber nicht. Der Process Monitor von Sysinternals zeigt auch keinen Zugriff auf die .DEU Resource an.

Uwe Raabe 25. Mär 2022 22:42

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Zitat:

Zitat von Steku (Beitrag 1503934)

Sehr witzig:
Zitat:

Zitat von softtouch (Beitrag 1503918)
Ich habe mit Better Translation Manager eine .DEU resource erzeugt.


softtouch 26. Mär 2022 06:45

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1503937)
Zitat:

Zitat von Steku (Beitrag 1503934)

Sehr witzig:
Zitat:

Zitat von softtouch (Beitrag 1503918)
Ich habe mit Better Translation Manager eine .DEU resource erzeugt.


Danke, das hilft ja ungemein...

Meine eigentliche Frage war aber, wie ich die Sprache, also das was ich im Menu Project->Languages mit "Set Active" in der IDE machen kann.

venice2 26. Mär 2022 07:32

AW: Wie wechsele ich die Sprache zur Laufzeit?
 
Zitat:

Zitat von softtouch (Beitrag 1503939)
Zitat:

Zitat von Uwe Raabe (Beitrag 1503937)
Zitat:

Zitat von Steku (Beitrag 1503934)

Sehr witzig:
Zitat:

Zitat von softtouch (Beitrag 1503918)
Ich habe mit Better Translation Manager eine .DEU resource erzeugt.


Danke, das hilft ja ungemein...

Meine eigentliche Frage war aber, wie ich die Sprache, also das was ich im Menu Project->Languages mit "Set Active" in der IDE machen kann.

Wurde doch schon beatwortet..
Zitat:

Wenn im Hauptprogramm die Sprache geändert wird, erfordert das einen Neustart.
Eigene Anwendung mit Shellexecute neu starten nach dem beenden wäre eine möglichkeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.
Seite 1 von 3  1 23      

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