Ich habe ein sehr seltsames Problem, das aussieht, als könnte es ein Silverlight-Bug sein. Ich habe dies in einer einfachen Anwendung aus VS2010, Silverlight Application Projekt Standardvorlage erstellt reproduziert.
In der Anwendung habe ich zwei .resx-Dateien, "Strings.resx" und "Strings.de.resx". Sie haben jeweils einen Schlüssel "SomeString", etwa so:
Strings.resx - SomeString - "irgendeine Testzeichenkette"
Strings.de.resx - SomeString - "eine DE-Testzeichenfolge"
In der Einzelanwendung MainPage.xaml habe ich einfach einen TextBlock, den ich im Code wie folgt verwende, in den Klassenkonstruktor der MainPage eingefügt:
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
txt.Text = Strings.SomeString;
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
txt.Text = Strings.SomeString;
Das Durchgehen mit dem Debugger zeigt, dass txt.Text zuerst "some DE test string" und dann "some test string" ist. Es funktioniert also alles, wie es sollte.
JEDOCH habe ich das deutsche Sprachpaket auf meinem Rechner installiert. Wenn ich nun in den Regionaleinstellungen des Rechners die Systemsprache auf "Deutsch" ändere und mich abmelde/anmelde, damit die Änderungen wirksam werden, funktioniert derselbe Code anders: der SELBE String "some DE test string" wird ZWEIMAL aus den Ressourcen abgerufen. Die zweite Einstellung der aktuellen Kultur auf "en-US" bewirkt im Grunde nichts und die deutsche Zeichenfolge wird immer noch abgerufen.
Wenn ich also eine Anwendung haben möchte, bei der der Benutzer die Anzeigesprache unabhängig von der Systemsprache ändern kann, kann ich das nicht tun, weil die falschen Ressourcen abgerufen werden.
Auch in diesem Fall, wenn die Sprache des Windows-Betriebssystems auf Englisch eingestellt ist, funktioniert alles korrekt, ich kann die Kultur ändern und es funktioniert, die richtigen String-Ressourcen werden geladen. Wenn die Windows-Betriebssprache auf Deutsch eingestellt ist (habe nicht für andere überprüft), bin ich nicht in der Lage, die englischen String-Ressourcen zu laden.
Das Problem tritt sowohl auf Vista- als auch auf Windows 7-Rechnern auf, ich habe es nicht auf anderen Rechnern getestet.
ps: Die csproj-Datei wurde geändert und enthält nun <SupportedCultures>en,en-US,de,de-DE</SupportedCultures>
Irgendeine Idee, was ich falsch mache?