Laden...

Multilanguage mit resx Dateien. Aber wie?

Erstellt von Vassili vor 18 Jahren Letzter Beitrag vor 17 Jahren 5.326 Views
Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren
Multilanguage mit resx Dateien. Aber wie?

Hy leute,

Ich möchte ein Programm mit Ressource Dateien Multilanguagefähig machen. Die Dateien sind wie folgt aufgebaut:

Languages.resx

Enthält die Sprach und Länderkürzel gemäß RFC3066 oder auch RFC1766 in der Spalte Name. in der Spalte Wert steht der Dateiname der eigentlichen Language Datei drin. Der zugriff läuft über CultureInfo.

Würde ich das Programm starten soll in einer Methode nachgeschaut werden, welchen Wert die Zeile mit dem Namen "de_DE" enthält. Der wert währe LngDE.resx

LngDE.resx

Diese Datei enthält die einzelnen Texte auf Deutsch
Name ist ne indexnummer und Wert gleich der Text

Ich habe nur das Problem, dass ich nicht weis, wie ich darauf zugreifen kann und wie das elegant von händen geht. Im moment komme ich nichtmal nen Meter weit. Außerdem verwirrt mich der ResXFileCodeGenerator. Was ist das, brauch ich das???

2.223 Beiträge seit 2005
vor 18 Jahren

moin

bevor du dir den hals bei deinem vorhaben brichst schau die mal ein webcast
von microsoft mit der thematik lokalisierung an

ist der einfachste weg oder schau mal edin die msdn dort ist es auch gut beschrieben

mfg

S
95 Beiträge seit 2006
vor 18 Jahren

Hi blackcoin,

wenn es sich bei deiner Anwendung um eine Windows-Anwendung handelt, dann kannst das auch einfacher haben.

Dann solltest du die Möglichkeit der Visual Studios verwenden.

Bei jedem Formular gibt es die Eigenschaft Localizable --> die einfach auf True, dann die Sprache wählen und die Texte ändern.

Brauchst dann nur noch einen Sprachselektionsbildschirm, wo du die betreffende Sprache einstellen kannst.

Und schon hast das Formular in einer anderen Sprache...

Mit irgendwelchen Meldungen kann man analog verfahren:

einfach eine Datei <Dateiname>.<RFC-Kürzel>.resx
z.B. MyMessage.de.resx (deutsche Ressourcendatei)
über den System.Resources.ResourceManager kannst dann die Meldungen auslesen.

greetz
Syrinx

Das größte Misstrauensvotum gegen Gott ist ein Blitzableiter auf dem Kirchturm! 😁

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

Genau mit dem Resource Manager komme ich nicht klar

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

Okay. der eine Satz ist nicht gerade informativ.

Also. Ich weis nicht, wie ich mit dem ResourceManager auf die Dateien zugreife. Habe hier im Forum gelesen, dass das lesen mit dieser Klasse funktioniert, aber ich habe keine Ahnung wie. Hab so Codestücke ausprobiert aber bekomme immer einen Fehler, weil er angeblich nix findet.

Ich habs mit den Dateinamen ausprobiert und dann auf den ResourceManager weiter aufgebaut aber nix funzelt da.🙁


System.Resources.ResourceManager LanguageManager = new System.Resources.ResourceManager("WindowsApplication.Lng",this.GetType().Assembly);
			LanguageManager.GetObject("de-DE", System.Globalization.CultureInfo.CurrentCulture);

hilfe?

S
95 Beiträge seit 2006
vor 18 Jahren

Was genau verstehst du nicht??

Mal ein kleines Beispiel:


using System.Resources;

ResourceManager resMan = new ResourcManager(Namensbereich.Datei,Assembly);

string irgendwas = resMan.getString("definierterString");

analog kannst du dir auch andere Sachen rausziehen, einfach mal die Methoden anschauen.

bzw. bei deinem Problem kann es sein, dass er die aktuelle Cultur ned findet.
Probiers mal mit einer neuen CultureInfo

greetz
Syrinx

Das größte Misstrauensvotum gegen Gott ist ein Blitzableiter auf dem Kirchturm! 😁

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren
			System.Resources.ResourceManager LanguageManager = new System.Resources.ResourceManager("WindowsApplication2.Lng", this.GetType().Assembly);

Also. ich hab ne datei Lng.resx. Diese ist in meinem Projekt enthalten. in dieser Datei gibt es ein Feld das "Test" heist. Der Wert ist "Hallo". Leider funktioniert die zweite Zeile nicht und ich verstehe nicht warum. ist doch genauso, wie du es gerade geschrieben hast

1.373 Beiträge seit 2004
vor 18 Jahren

Der Name der Datei muss mit dem vollständigen "Basisnamen" angegeben sein. Dieser setzt sich zusammen aus dem Default-Namespace (Projekteinstellungen) und der Hierarchie von Unterordnern, in der die Datei liegt.

Eine Resourcendatei foo.resx im Ordner "Resourcen/Daten" in einem Projekt mit dem Defaultnamespace Blabla hat den folgenden Basisnamen:

Blabla.Resourcen.Daten.foo

Grüße,
Andre

S
95 Beiträge seit 2006
vor 18 Jahren

Du solltest deine .resx Datei mit einer Länderkennzeichnung versehen.

Probiers mal so:

Lng.resx (Standard-Datei) (brauchst du aber nicht unbedingt)
Lng.de.resx (Deutsche Datei)
Lng.en.resx (Englische Datei) / oder ein beliebiges anderes RFC3066 Kürzel

dann schreib mal den Code:


using System.Resources;

System.Threading.Thread.CurrentThread.CurrentUICulture = 
System.Threading.Thread.CurrentThread.CurrentCulture = 
new System.Globalization.CultureInfo("de-DE");

ResourceManager LanguageManager = new ResourceManager("WindowsApplication2.Lng", this.GetType().Assembly);

Console.WriteLine(LanguageManager.GetString("Hallo"));

danach änderst mal das de-DE auf en-US (oda was anderes)[die Datei sollte halt mit dem Kürzel vorhanden sein], dann solltest das in einer anderen Sprache

Das größte Misstrauensvotum gegen Gott ist ein Blitzableiter auf dem Kirchturm! 😁

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

Danke für eure Tipps. Hat jetzt doch funktioniert. Hab erst die Funktionsweise des Managers nicht verstanden, aber meine Pfadangabe war nur falsch. Nungut. Hab jetzt mein funzelndes system.

thx @all

2.223 Beiträge seit 2005
vor 18 Jahren

hi

genau darum habe ich den verweiß auf die webcast von ms gegeben

mfg

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 18 Jahren

Öhm, nichts gegen dich, aber deine Aussage, DASS ich dort reinschauen soll hilft mir nicht viel. MS ist nicht klein. wo soll ich das finden. du hattest keinen link angegeben, oder ich bin blind.

2.223 Beiträge seit 2005
vor 18 Jahren

hi

ebenfalls nichts gegen dich aber in der msdn sollte mann sich zurechfinden können
und auf microsoft mal nach webcast suchen sollte nicht das problem sein

auf das stichwort Lokalisieren kann mann auch selber drauf kommen

es ist einfach nur so ....... das verschlucke ich mir jetzt lieber

mfg

5.942 Beiträge seit 2005
vor 17 Jahren

Hallo zusammen

Hier noch ein Link zum Thema:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 17 Jahren

Hy, gerade die Message im Postfach entdeckt. Danke für den Link. Mittlerweile mach ich die Lokalisierung (so muss ich es ja nennen) nach dem Prinzip. Der Link zeigt mir, dass ich auf dem richtigen Weg bin.

Ich muss mir das Buch unbedingt kaufen, auch wenn es das buch digital zum download gibt

G
131 Beiträge seit 2005
vor 17 Jahren

Auch wenn die Selbständigkeit bei der Problemlösung nicht abhanden kommen und hier nicht fertiger Coder überreicht werden soll, fände ich es gut, wenn solche Links auch hier gepostet würden.

Hintergrund: Manchmal sind solche Suchen bei MSDN oder anderen Sachen doch sehr spezifisch auf die Suchworte ausgerichtet (Groß- und Kleinschreibung etc.) und man kann nicht immer das finden, was andere schnell finden. Es ist einfach eine schöne Hilfe zur Selbsthilfe.

Bitte postet doch mal den Link dorthin.

476 Beiträge seit 2004
vor 17 Jahren

Original von Generalissimo
Bitte postet doch mal den Link dorthin.

Webcast Lokalisierung

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de