2016-11-12 2 views
0

Ich versuche, eine mehrsprachige Navigation in einer MVC 5-Anwendung zu erstellen.Lokalisierung in MVC 5 - Wie kann ich mehrsprachigen Text in meiner Ansicht mit einer Ressourcendatei rendern?

Was ich getan habe:

  1. Set System.Threading.Thread.CurrentThread.CurrentUICulture entweder auf "en-US" oder "es-ES" auf Basis von Cookie-Wert (standardmäßig auf Englisch es sei denn Benutzer Spanisch wählt)
  2. Erstellt drei Ressourcendateien (dies ist das erste Mal, dass ich sie benutze, daher bin ich mir nicht sicher, ob ich das Konzept vollständig verstehe ...) Index.resx, Resouce.de-US.resx, Resouce.es-ES.resx. Jede Ressourcendatei befindet sich in einem Ordner namens App_GlobalResources -Ordner

  3. Jeder RESX-Datei wurde eine Name/Wert-Kombination hinzugefügt, Home/Home für Index.resx und en-US.resx und Home/Casa for es-ES. resx

  4. Versucht mit @Resources.Index.Home in meiner Layout-Datei und dachte, dass, wenn der Wert von CurrentUICulture von en-US zu ES-ES und umgekehrt geändert wird, die Sprache basierend auf den Werten in meinen Ressourcen-Dateien ändern würde.

Könnte jemand bitte lassen Sie mich wissen, wie ich den spanischen Text bekommen kann, wenn der Wert CurrentUICulture ist „es-ES“ und der englische Text, wenn es „en-US“?

_Layout.cshtml

Resource.resx

EDIT

ich gesagt haben sollte - @Resources.Index.Home hat den Text "Home" in der Navigation machen. Allerdings, wenn ich wechseln CurrentUICulture zu "es-ES", es macht immer noch "Home", nicht "Casa"

EDIT 2

Hier ist, wie ich gesetzt CurrentUICulture global.asax

ist
public void Application_AuthenticateRequest(Object sender, EventArgs e) 
     { 
      if (Request.Cookies["lang"] == null) 
      { 
       HttpCookie lang = new HttpCookie("lang"); 
       lang.Value = "english"; 
       lang.Expires = DateTime.Now.AddDays(30d); 
       Response.Cookies.Add(lang); 
      } 
      else if (Request.Cookies["lang"] != null) 
      { 
       if (Request.Cookies["lang"].Value != null && Request.Cookies["lang"].Value == "english") 
       { 
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us"); 
       } 
       else if (Request.Cookies["lang"].Value != null && Request.Cookies["lang"].Value == "spanish") 
       { 
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-es"); 
       } 
      } 
     } 
+0

Es sollte funktionieren, haben Sie irgendeine Fehlermeldung? Kannst du wie dein Controller posten, der deine CurrentUICulture initialisiert? Was hast du in @ Resources.Index.Home? Zeigt es etwas? – Yanga

+0

Danke - guter Punkt - es gibt keinen Fehler. Bitte sehen Sie mein Update. '@ Ressourcen.Index.Home "gibt den Text" Home "wieder, ändert sich jedoch nicht in" Casa ", wenn" CurrentUICulture "auf" es-ES "gesetzt ist – tradez

+0

Können Sie den Code, in dem Sie Ihre CurrentUICulture – Yanga

Antwort

0

Versuchen Sie einfach @Resources.Index.Home durch @Resources.Home zu ersetzen.
Dies ist Ihr Verständnis über die Lokalisierung.
Jede App mit Lokalisierung (sagen N Kulturen) muss N .resx-Dateien mit der gleichen Namen, aber unterschiedliche Suffixe haben. + Standardkultur kann ohne Suffixe verwendet werden. Sie haben also 2 Kulturen - Sie müssen 2. Resx-Dateien verwenden, nicht mehr. So wird Index.resx überhaupt nicht benötigt.
Dies sollte funktionieren. Wenn nicht, weitere Korrekturen:
- Verwenden Sie nicht App_GlobalResources-Ordner. Erstellen Sie einfach .resx in gemeinsamen Projektordnern oder im Projektstammordner, genau wie in Desktop-.NET-Apps.
Das hat mir geholfen, hoffe das wird dir helfen.

Verwandte Themen