AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie wechsele ich die Sprache zur Laufzeit?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie wechsele ich die Sprache zur Laufzeit?

Ein Thema von softtouch · begonnen am 25. Mär 2022 · letzter Beitrag vom 28. Mär 2022
 
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 13:35
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 <> 'DEUthen
  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
Renate
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 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