Hallo zusammen,
ich habe mich erst neu in das Themengebiet der Lokalisierung von Anwendungen eingearbeitet, versuche
mein Problem aber möglichst verständlich zu erläutern.
Mein Projekt besteht aus einem Hauptprogramm(Main.exe) und mehreren BPLs(z.B.
Package.bpl) die zur Laufzeit dynamisch geladen werden. Sowohl EXE als auch DLLs enthalten Formulare. Zusätzlich zu der EXE und den BPLs gibt es die entsprechenden Resource-DLLs(Main.DE, Main.EN,
Package.DE,
Package.EN) für die Spracheinstellung. Man hat nun die Möglichkeit, bei Aufruf über die Kommandozeile, die Anwendung in einer anderen Sprache zu starten (z.B. Main.exe /en). Dieser Mechanismus wird vorallem für Testzwecke verwendet.
Realisiert wurde das Ganze ungefähr so:
Im Konstruktor des Hauptfensters wird aus dem Schlüssel
HKEY_CURRENT_USER\Software\Embarcadero\Locales
die gegenwärtige Spracheinstellung gelesen. Falls diese nicht mit dem übergebenen Parameter übereinstimmt, wird die Sprache über den folgenden Mechanismus gewechselt.
if (LoadNewResourceModule(FRENCH)) ReinitializeForms(); (siehe
http://docwiki.embarcadero.com/RADSt...misch_wechseln)
Die neue Spracheinstellung wird dann über den obigen Schlüssel in der Registry festgehalten.
Dieser Mechanismus hat bisher (BCB2006) immer Funktioniert. Seit dem ich aber XE2 verwende, tritt folgendes Phänomen auf:
Beim ersten Wechsel der Sprache (über Kommandozeile)wird das Hauptfenster in der richtigen Sprache dargestellt, die Fenster aus den geladenen Packages aber nicht. Erst wenn man diesen Vorgang wiederholt, stimmt die Sprache auch für die Fenster aus den BPLs.
Erstaunlich ist, dass zum Zeitpunkt an dem die
BPL geladen wird, in der Registry der richtige Eintrag steht. Es scheint ausschlaggebend zu sein, was beim Start der Hauptanwendung in der Registry stand.
Da ich schon seit Tagen nach einer Lösung suche, hoffe ich, dass sich jemand findet, der ähnliches schon erlebt hat oder mir einen Anhaltspunkt geben kann.
Freundliche Grüße
Kerem