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
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 11:51
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.
  Mit Zitat antworten Zitat
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, 14: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
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 18:57
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
zeras
Online

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 19:27
Wir verwenden was kommerzielles von SiComponents. Geht wunderbar zur Laufzeit.
Ich nutze auch diese Komponente und finde die Umsetzung auch sehr gut.

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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 19:35
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.
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
185 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 19:40
Oder mal hier schauen...

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

Viele Grüße
Steku
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#7

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 21:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#8

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 25. Mär 2022, 23:42
Sehr witzig:
Ich habe mit Better Translation Manager eine .DEU resource erzeugt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#9

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 26. Mär 2022, 07:45
Sehr witzig:
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.

Geändert von softtouch (26. Mär 2022 um 07:52 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#10

AW: Wie wechsele ich die Sprache zur Laufzeit?

  Alt 26. Mär 2022, 08:32
Sehr witzig:
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.

Geändert von venice2 (26. Mär 2022 um 08:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:17 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