![]() |
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. |
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:
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.
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; .... Ist nicht perfekt, aber zum Testen erstmal geeignet. Renate |
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. |
AW: Wie wechsele ich die Sprache zur Laufzeit?
Zitat:
Zitat:
|
AW: Wie wechsele ich die Sprache zur Laufzeit?
Zitat:
|
AW: Wie wechsele ich die Sprache zur Laufzeit?
|
AW: Wie wechsele ich die Sprache zur Laufzeit?
Zitat:
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. |
AW: Wie wechsele ich die Sprache zur Laufzeit?
Zitat:
Zitat:
|
AW: Wie wechsele ich die Sprache zur Laufzeit?
Zitat:
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. |
AW: Wie wechsele ich die Sprache zur Laufzeit?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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