Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Globalisierung von Plugin Architekturen
MuhammedC#
myCSharp.de - Member



Dabei seit:
Beiträge: 222

Themenstarter:

Globalisierung von Plugin Architekturen

beantworten | zitieren | melden

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#
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
MuhammedC#
myCSharp.de - Member



Dabei seit:
Beiträge: 222

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
HyperteX
myCSharp.de - Member



Dabei seit:
Beiträge: 182
Herkunft: Karlsruhe

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

wenn ich das so lese hast du das regionalisierungskonzept des frameworks zum teil nachimplementiert. aber bei weitem noch nciht so mächtig.
Andreas.May
myCSharp.de - Member

Avatar #avatar-2474.gif


Dabei seit:
Beiträge: 915

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Andreas.May am .
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo MuhammedC#,

siehe Lokalisierbarkeit bei Plugins erzwingen

herbivore
private Nachricht | Beiträge des Benutzers