Wie kann ich sicherstellen, dass die entsprechende Sprachversion einer Zeichenfolgenressource zur Laufzeit geladen wird?

StackOverflow https://stackoverflow.com/questions/4968990

Frage

Ich habe eine String-Ressourcendatei namens "strings.resx" in meinem VB.NET projekt, definiert als eingebettete Ressource.Ich habe eine andere Datei namens strings.es.resx, die alle die gleichen Zeichenfolgen auf Spanisch enthält.Ich lade die Ressource zur Laufzeit mit dem folgenden Code:

MyStrings = New ResourceManager("myprog.strings", GetType(MainForm).Assembly)

Ich habe das Sprachgebietsschema in Windows auf Spanisch eingestellt und mich wieder angemeldet, aber die englischen Zeichenfolgenressourcen werden immer noch geladen, wenn das obige ausgeführt wird.Wie kann ich die spanischen Ressourcen laden, wenn das Windows-Gebietsschema ES ist?Ich hatte erwartet, dass es automatisch gehandhabt wird.

War es hilfreich?

Lösung

Werfen Sie einen Blick auf die System.Threading.Thread.CurrentThread.CurrentUICulture eigentum - es hat die Angewohnheit, auf uns fixiert zu sein.

Wenn dies der Fall ist, versuchen Sie, es auf dasselbe einzustellen wie CurrentCulture.

Update

Da dies nicht funktioniert hat, überprüfen Sie, ob der Ausgabeordner Ihrer Anwendung einen hat es ordner, in dem sich eine DLL namens Strings befindet.Ressourcen.dll.Wenn nicht, dann findet der Ressourcenmanager im Grunde genommen die kulturspezifische Zeichenfolgenressource nicht, weil sie nicht vorhanden ist. In diesem Fall kopieren Sie sie hinein und es sollte funktionieren.

Andere Tipps

HAFTUNGSAUSSCHLUSS - dies ist alles aus dem Gedächtnis und ist möglicherweise nicht 100% genau :-)

.NET-Ressourcen werden geladen mit Thread.CurrentUICulture (es sei denn, Sie überschreiben es explizit beim Laden von Ressourcen in Code). Thread.CurrentUICulture wird durch die Benutzeroberflächensprache festgelegt, die in Ihrer Windows-Installation verwendet wird, und kann nicht geändert werden.Dies ist nicht dasselbe wie Thread.CurrentCulture, die in der Systemsteuerung eingestellt wird und jederzeit geändert werden kann.

Zum Beispiel auf meinem PC, CurrentCulture zurückgeben "en-GB" weil ich dort bin, aber CurrentUICulture zurückgeben "en-US" weil Microsoft nur eine englischsprachige Version von Windows bereitstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top