Ressourcen-DLLs verwenden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Anwendungen lokalisieren

Die ausführbare Datei, die DLLs und die Packages (.bpl-Dateien), aus denen sich Ihre Anwendung zusammensetzt, enthalten alle benötigten Ressourcen. Um diese Ressourcen durch lokalisierte Versionen zu ersetzen, brauchen Sie Ihrer Anwendung lediglich lokalisierte Ressourcen-DLLs beizulegen, die dieselben Namen haben wie Ihre EXE-, DLL- oder DPL-Dateien.

Beim Laden ermittelt Ihre Anwendung das Gebietsschema des Rechners, auf dem sie ausgeführt wird. Wenn sie Ressourcen-DLLs findet, die dieselben Namen haben wie ihre EXE-, DLL- oder DPL-Dateien, überprüft sie die Dateinamenserweiterung dieser DLLs. Falls die Dateinamenserweiterung eines Ressourcenmoduls mit dem Gebietsschemacode des Computers übereinstimmt, verwendet Ihre Anwendung anstelle der Ressourcen in den EXE-, DLL- oder DPL-Dateien die Ressourcen aus dem Modul. Ist für diese Kombination aus Sprache und Land kein Ressourcenmodul vorhanden, sucht die Anwendung nach einem Ressourcenmodul, das wenigstens die geforderte Sprache unterstützt. Fehlt auch ein solches Modul, verwendet die Anwendung die Ressourcen aus der ausführbaren Datei, der DLL oder dem Package.

Wenn Ihre Anwendung ein anderes Ressourcenmodul verwenden soll als das, welches dem Gebietsschema des Computers entspricht, können Sie dies durch einen "Locale Override"-Eintrag in der Windows-Registrierung erreichen. Wählen Sie zum Hinzufügen eines neuen Schlüssels für den Schlüssel HKEY_CURRENT_USER\Software\Embarcadero\Locales den Befehl Neu > Zeichenfolge. Fügen Sie in die Spalte Name den Pfad und den Namen der ausführbaren Datei Ihrer Anwendung als String ein, und tragen Sie in die Spalte Wert die gewünschte Dateinamenserweiterung Ihrer Ressourcen-DLL ein. Die Anwendung sucht beim Start nach Ressourcen-DLLs mit dieser Erweiterung, bevor sie das Gebietsschema des Systems verwendet. Indem Sie diesen Registrierungseintrag setzen, können Sie lokalisierte Versionen Ihrer Anwendung testen, ohne das Gebietsschema des Systems zu ändern. (Weitere Informationen über die Verwendung des Registrierungsschlüssels "Locale Override" finden Sie unter Anwendungen lokalisieren und Deployment von lokalisierten Anwendungen.)

Die folgende Funktion kann beispielsweise in einem Installations- oder Setup-Programm verwendet werden. Sie setzt in der Registrierung den Schlüsselwert, der das Gebietsschema festlegt, das beim Laden von Delphi-Anwendungen verwendet werden soll:

procedure SetLocaleOverride(const FileName, LocaleOverride: string);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    if Reg.OpenKey('Software\Embarcadero\Locales', True) then
      Reg.WriteString(FileName, LocaleOverride);
  finally
    Reg.Free;
  end;
end;
void SetLocalOverrides(char* FileName, char* LocaleOverride) {
	HKEY Key;
	const char* LocaleOverrideKey = "Software\\Embarcadero\\Locales";
	if (RegOpenKeyEx(HKEY_CURRENT_USER, LocaleOverrideKey, 0, KEY_ALL_ACCESS,
		&Key) == ERROR_SUCCESS) {
		if (lstrlen(LocaleOverride) == 3)
			RegSetValueEx(Key, FileName, 0, REG_SZ,
			(const BYTE*)LocaleOverride, 4);
		RegCloseKey(Key);
	}
}

In der Anwendung können Sie mit der globalen Funktion System.FindResourceHInstance das Handle des aktuellen Ressourcenmoduls ermitteln. Zum Beispiel:

LoadStr(FindResourceHInstance(HInstance), 
 IDS_AmountDueName, szQuery, SizeOf(szQuery));

 LoadString(FindResourceHInstance(HInstance),
  IDS_AmountDueName, szQuery, sizeof(szQuery));
LoadString(FindResourceHInstance(HInstance), IDS_AmountDueName, szQuery, sizeof(szQuery));

Auf diese Weise können Sie eine Anwendung ausliefern, die sich automatisch an das Gebietsschema des Computers anpasst, auf dem sie ausgeführt wird. Sie benötigen dazu lediglich die entsprechenden Ressourcen-DLLs.

Siehe auch