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???
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
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! 😁
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?
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! 😁
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
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
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! 😁
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
hi
genau darum habe ich den verweiß auf die webcast von ms gegeben
mfg
Ö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.
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
Hallo zusammen
Hier noch ein Link zum Thema:
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
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
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.
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).
Mein Blog: Yellow's Blog auf sqlgut.de