2010-11-26 15 views
1

Ich habe eine Server-App, in der ich Unterstützung für mehrere Sprachen mit Ressourcen-Dateien haben möchte. Da es sich um einen Server handelt, kann ich keine Satelliten-Assemblies verwenden (da verschiedene Threads unterschiedliche Sprachen verwenden).Ressourcendateien mit mehreren Sprachen

Ich habe versucht, mehrere Ressourcendateien in der folgenden Art und Weise hinzuzufügen:

  • MyResourceName.resx
  • MyResourceName.sv.resx

Sie enthalten einen String-Tabelle mit einem Text in Sie.

Ich benutzte Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(1053);, um die Sprache zu wechseln. Aber ich habe immer noch die Standardsprache bei der Verwendung von var string = MyResourceName.MyText.

Ich habe versucht, die CurrentUICulture zu ändern.

Wie kann ich Unterstützung für mehrere Sprachen hinzufügen?

aktualisieren

Sie wissen nicht, wenn es darauf ankommt. Aber ich versuche es in meinem Unit-Test-Projekt (MSTest). Die Ressourcendateien sind auch ein Teil des Testprojekts.

Antwort

0

Zuerst ist es CurrentUICulture, die dies steuert (Ich bemerkte, dass Sie das auch versucht haben; wollte es nur klären).

Zweitens: Ist die Anwendung Multithreading? Könnte es sein, dass Sie CurrentUICulture auf einen Thread setzen, aber lesen Sie MyResourceName.Text auf einem anderen (der dann nicht die gleiche Kultur hat)?

+0

Nein, gleicher Thread. – jgauffin

0

Wenn Sie eine ResourceManager wie diese

var manager = new ResourceManager("you.resource.strings.file", Assembly.GetExecutingAssembly()); 

Sie immer einen String aus es mit in der gewünschten Sprache durch den Aufruf der überladenen GetString Methode, die eine nimmt CultureInfo Objekt als Parameter erhalten. Auf diese Weise müssen Sie die Kultur in Ihrem Thread nicht festlegen.

var string = manager.GetString("myText", CultureInfo.GetCulture(1053)); 
+0

Hat auch nicht funktioniert. Es ist so, als würde es meine zweite (schwedische) Ressourcendatei nicht finden. – jgauffin

+0

welche DLL-Dateien kompiliert werden, erhalten Sie tatsächlich einen SV-Unterordner unter/bin? –

+0

Ich bekomme einen Unterordner namens "sv" und ich habe Reflektor verwendet, um den Inhalt zu überprüfen. Der Ausdruck ist da drin. Aber ich bekomme keine Assembly für die Standardsprache? – jgauffin

0

Wenn die .RESX mit einem "Embedded Resource" definiert ist, bauen Aktion in Visual Studio (mit einem Satz Custom Tool auf "ResXFileCodeGenerator"), können Sie die .resources.dll für schwedische zusammengestellt bereitstellen müssen. Es sollte im Ordner bin \ sv sein.

Wenn Sie für ASP.NET-Webapps die .RESX-Dateien in einem Ordner mit dem Namen App_GlobalResources definieren, haben Sie keinen bin \ sv-Ordner (in diesem Fall wird die Build-Aktion "Content" mit einem benutzerdefinierten Tool festgelegt) zu "GlobalResourceProxyGenerator"), so wie Sie sagen, Sie müssen keine zusätzliche DLL bereitstellen.

In beiden Fällen ist der Code in Ordnung (mit CurrentUICulture, nicht CurrentCulture) und sollte funktionieren.

Verwandte Themen