2012-04-10 9 views
7

Ich habe 2 Ressourcendatei: Resources.resx (hat einige Saiten in rumänischer Sprache) und Resources.en-US.resx (hat die gleichen Saiten auf Englisch).Sprache ändern basierend auf Ressourcen-Dateien in ASP.NET MVC 4

Ich möchte nur ändern (in einer Dropdown-Liste, eine Listbox, ...) Hexe Ressourcendatei zu verwenden. Es könnte in _Layout.cshtml sein. Ich muss die Kultur des Benutzers nicht erkennen.

F: Wie kann ich eine Ressourcendatei von einer Seite auswählen?

Edit: Kann es getan werden, ohne die Standard MapRoute zu ändern?

Antwort

6

Ein Weg, wie Sie es tun können, ist die Drop - Down - Seite nur auf eine sprachspezifische URL umzuleiten (das ist ganz nett, da Sie sprachspezifische Links senden können), dann in einer Basisklasse auf Ihrem Controller Gebietsschema des Threads.

Dieser Blog-Eintrag deckt, was ich in besserem Detail spreche: Localization in ASP.NET MVC – 3 Days Investigation, 1 Day Job

+1

Dieses Beispiel enthält ASPX-Seiten, die nicht mit Rasierklingen versehen sind .cshtml. Und kann es gemacht werden, ohne die Standard MapRoute zu ändern? – Misi

+0

Es verwendet aspx aber Cshtml Rasierklingen Seiten arbeiten auf die gleiche Weise, nur leicht unterschiedliche Syntax (ich mache das mit Rasierapparat in einer Anwendung ganz gut). Sie müssen auch nicht die Standard-MapRoute ändern (damit auch nicht länderspezifische URLs funktionieren), Sie müssen lediglich eine zusätzliche Route hinzufügen. – kmp

+0

Könnten Sie (oder irgendjemanden) den Code aufschreiben, in dem ich ** Resources.en-US.resx ** anstelle von ** Resources.resx ** aus dem Ordner _App_GlobalResources_ auswähle? – Misi

4

prüft diese Blog. Ohne die Standard-MapRoute zu ändern.

Die _Layout.cshtml Seite:

@using Resources; 
<!DOCTYPE html> 

<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title></title> 
    </head> 
    <body> 
     <div> 
      <form method="post"> 
       @TestResource.SelectLanguage 
       <select name="lang"> 
        <option></option> 
        <option value="en-GB" @(Culture == "en-GB" ? "selected=\"selected\"" : "")>English</option> 
        <option value="fr-FR" @(Culture == "fr-FR" ? "selected=\"selected\"" : "")>French</option> 
        <option value="de-DE" @(Culture == "de-DE" ? "selected=\"selected\"" : "")>German</option> 
       </select> 
       <input type="submit" value="@TestResource.Submit" /> 
      </form> 
     </div> 
     @RenderBody() 
    </body> 
</html> 

Die Kultur in der _PageStart.cshtml Datei festgelegt ist:

@{ 
    Layout = "~/_Layout.cshtml"; 
    if(!Request["lang"].IsEmpty()){ 
     Culture = UICulture = Request["lang"]; 
    } 
} 

Die letzte Seite ist die Standardseite selbst:

@using Resources; 
<h1>@TestResource.Welcome</h1> 
<p><img src="images/@TestResource.FlagImage" /></p> 

http://www.mikesdotnetting.com/Article/183/Globalization-And-Localization-With-Razor-Web-Pages