Laden...

Globalisierung von Plugin Architekturen

Erstellt von MuhammedC# vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.467 Views
M
MuhammedC# Themenstarter:in
222 Beiträge seit 2005
vor 15 Jahren
Globalisierung von Plugin Architekturen

Hallo,

ich habe eine Anwendung geschrieben, welche dynamisch per Reflection Plugins lädt. Jetzt hätte ich gerne einen mechanismus welcher sich um die Globalisierung kümmert. Zur Programmierzeit steht leider nicht fest, wo das Programm überall eingesetzt werden wird.
Habt ihr einen Tipp wo ich mal nachschauen könnte wie man so etwas am elegantesten löst?

LG MC#

3.971 Beiträge seit 2006
vor 15 Jahren

Reicht es nicht, wenn dein Plugin eine Funktion zum Setzen der Kultur hat?


public interface IPlugin
{
  CulturInfo Cultur
  {
     get;
     set;
   }
}

Anschließend ist es Aufgabe des Plugins das entsprechend umzusetzen

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

M
MuhammedC# Themenstarter:in
222 Beiträge seit 2005
vor 15 Jahren

aber es soll alles dynamisch übersetzbar sein. auch das plugin weiß zu seiner entwicklungszeit nicht in welchen ländern es später eingesetzt werden wird.
ich suche daher einen mechanismus welcher später dynamisch die ressourcen dateien erstellen kann, etc.

H
182 Beiträge seit 2006
vor 15 Jahren

Hi,

ich habe das folgendermaßen gemacht:
Ich habe eine Globale Classe namens TranslationManager
Ändert sich die Sprache (oder wird zum ersten mal geladen) so läd dieser Manager mehrere XML Dateien aus einem Verzeichnis. Da stehen globale übersetzungen drin.
Zusätzlich schaut es in jedem Pluginverzeichnis nach einer XML datei z.B. de.xml oder en.xml.

Die XML dateien sind im prinzip nach Namespaces aufgeteilt.
z.B.

<Global>
   <GUI>
       <ButtonOK text="OK" />
   </GUI>
</Global>

Dies kann ich nun per Funktion aus dem TranslationManager abrufen. TranslationManager.GetText("Global.GUI.ButtonOK");
Und schon bekomme ich die übersezung.

Ob dieses jetzt in der Plugin Übersetzung oder in der "globalen" Übersetzung steht is mir egal.

Was is zusätzlich gemacht habe ist, dass man Objekte im TranslationManager registrieren kann, welche, falls unterstützt, übersetzt werden. So registriere ich z.B. rekursiv mein gesamtes Form und wenn ich die Sprache ändere, werden alle Objekte von Typ TextBox oder Label ünbersetzt. Aber das is nur ein feature um mir die Arbeit zu erleichtern^^

Falls Du interesse hat, kannst ich dir dazu gerne mal den Code schicken, oder du reflektierst einfach mein aktuelles Projekt DataShield (http://datashield.eu) 😉

Gruß
HyperteX

"In der Informatik geht es genauso wenig um Computer wie in der Astonomie um Teleskope."
Edsger Dijkstra

Gelöschter Account
vor 15 Jahren

wenn ich das so lese hast du das regionalisierungskonzept des frameworks zum teil nachimplementiert. aber bei weitem noch nciht so mächtig.

915 Beiträge seit 2006
vor 15 Jahren

Hrm, was hast den genau vor?

Soll die Sprache über die Installationsroutine getriggert werden?

normal reicht es wenn man alles in die Resourcen auslagert, egal ob *.dll (Plugin) oder *.Exe Datei. Die jeweiligen Resourcen werden dann in die verschiedenen Sprachen übersetzt. Hierfür eignet sich zum Beispiel das kostenpflichtige Programm
PASSOLO.

Über Installschild kann man dann die Resourcen ersetzten lassen indem man bei der Installationsroutine eine Sprachauswahl einbindet. Oder noch besser, man überlässt die Art von Drecksarbeit einem Tool wie z.B. dem FinalBuilder.

Denk dran, bei Forms kannst Localizeable = True einstellen und der PASSOLO Mensch kann diese resourcen auch ändern.

Rate dir bzw. deiner Firma eh zu diesen beiden Tools, den ohne automatischen Buildprozess und geschickter Übersetzung verschwendet man dafür viel zu viel Zeit.

Soll die Sprache dynamisch zur Laufzeit geändert werden können?
Hierzu einfach wieder den Weg über die Resourcen gehen und diese einfach über ein Interface validieren lassen, das ganze sähe dann wie es kleines_eichhoernchen vorgeschlagen hat aus.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo MuhammedC#,

siehe Lokalisierbarkeit bei Plugins erzwingen

herbivore