2012-05-18 11 views
8

Ich habe meine ExportForm ins Deutsche lokalisiert (de) und Russisch (ru), wie Sie unten sehen können: .NET Lokalisierung - wie man eine Sprache einstellt?

Wenn mein Culture Deutsch ist (Austrian-de-AT) dann alles in Ordnung ist, ich sehe die Format ins deutsche übersetzt:

string specCult = "de-AT"; 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(specCult); 

Aber ich sehe die englische Benutzeroberfläche mit dem russischen (ru-RU) Culture

string specCult = "ru-RU"; 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(specCult); 

Obwohl, wenn ich "ru" statt der "ru-RU" zu Erstellen Sie die CultureInfo es funktioniert:

string specCult = "ru"; 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(specCult); 

Könnten Sie mir bitte helfen, was könnte das Problem sein? Oder zeigen Sie mir bitte eine Anweisung, um das Problem zu untersuchen.

+0

Versuchen Sie, eine leere Ressourcendatei für 'ru-RU' hinzuzufügen. Ressourcen, die nicht darin gefunden werden, sollten auf die 'ru' Datei zurückgehen. – Oded

+0

Sehr seltsam, aber selbst wenn ich eine nicht leere Resource-Datei für ru-RU hinzufüge, kann ich es nicht zeigen von Thread.CurrentThread.CurrentUICulture = new CultureInfo ("ru-RU") –

+0

Ich finde das sehr seltsam in Anbetracht dessen Sie sehen kein Problem mit "de-AT" (und dass es für "ru" funktioniert). In Ihrem Debugger können Sie überprüfen, was Thread.CurrentThread.CurrentUICulture auf gesetzt ist, nachdem Sie ihm neue CultureInfo ("ru-RU") zugewiesen haben ... Ich frage mich, ob das Problem im CultureInfo-Konstruktor ist. – Clafou

Antwort

0

ru ist der neutrale Name für die russische Kultur, und Ru-Ru ist der Name der spezifischen russischen (Russland) Kultur.

This is taken from MSDN link

Beim Start setzt das Beispiel die aktuelle Kultur und die aktuelle UI Kultur Russisch (Russland) auf allen Systemen mit Ausnahme derjenigen, auf denen die Standardsystem Kultur bereits Russisch ist (Russland). Wenn die Standardsystemkultur bereits Russisch (Russland) ist, setzt der Code die aktuelle Kultur und die aktuelle UI-Kultur auf Englisch (USA).

Here is other good explanation

Wenn die Ressourcen für eine bestimmte Kultur im Betriebssystem nicht verfügbar sind, die Ressourcen für die zugehörige neutrale Kultur sind verwendet. Wenn die Ressourcen für die neutrale Kultur nicht verfügbar sind, werden die Ressourcen verwendet, die in der Hauptbaugruppe eingebettet sind.

Die Liste der Ländereinstellungen in der Windows-API unterscheidet sich ein wenig von der Liste der Kulturen, die von .NET Framework unterstützt werden, . Wenn die Interoperabilität mit Windows erforderlich ist, z. B. über den p/invoke-Mechanismus, muss die Anwendung eine bestimmte Kultur verwenden, die für das Betriebssystem definiert ist. Die Verwendung der spezifischen Kultur gewährleistet Konsistenz mit der entsprechenden Windows-Ländereinstellung, die mit einem Gebietsschema Identifikator identifiziert wird, der dasselbe wie LCID ist.

+0

Sie müssen über Fallbacks lesen. Das behebt das Problem nicht. – Oded

2

Ich habe das Problem bestimmt: ru-RU wurde als neutrale Sprache in meiner Hauptprojekt Montage Einstellungen ausgewählt.

MSDN: Das Attribut NeutralResourcesLanguage informiert den ResourceManager über die Sprache, die zum Anzeigen der Ressourcen der neutralen Kultur für eine Assembly verwendet wurde. Wenn Ressourcen in der gleichen Kultur wie die Sprache für neutrale Ressourcen gesucht werden, verwendet der ResourceManager automatisch die Ressourcen, die sich in der Hauptbaugruppe befinden.Dies geschieht, anstatt nach einer Satellitenassembly zu suchen, die die aktuelle Benutzeroberflächenkultur für den aktuellen Thread aufweist. Dies verbessert die Suchleistung für die erste Ressource, die Sie laden, und kann Ihren Arbeitssatz reduzieren.

http://msdn.microsoft.com/en-us/library/bb385967.aspx

Verwandte Themen