2012-04-10 9 views
7

mam 2 pliki zasobu: resources.resx (ma pewne ciągi w rumuński) i Resources.en-US.resx (ma te same ciągi w języku angielskim).Zmień język w oparciu o pliki zasobów w ASP.NET MVC 4

Chcę tylko zmienić (na liście rozwijanej, w polu listy ...) plik zasobów czaru, którego należy użyć. Może to być w _Layout.cshtml. Nie muszę wykrywać kultury użytkownika.

P: Jak mogę wybrać plik zasobów ze strony?

Edycja: Czy można to zrobić bez zmiany domyślnego MapRoute?

Odpowiedz

6

Jednym ze sposobów, w jaki można to zrobić, jest rozwijanie przekierowania strony na adres URL specyficzny dla danego języka (jest to całkiem miłe, ponieważ można wysyłać linki specyficzne dla danego języka), a następnie w klasie bazowej na kontrolerze, ustawić Lokalizacja wątku.

Ten blogu obejmuje co mówię w lepszej szczegółach: Localization in ASP.NET MVC – 3 Days Investigation, 1 Day Job

+1

W tym przykładzie strony .aspx nie brzmią .cshtml. I czy można to zrobić bez zmiany domyślnego MapRoute? – Misi

+0

Używa aspx, ale strony maszynki cshtml działają w ten sam sposób, tylko nieco inna składnia (robię to za pomocą maszynki do golenia w apelacji w porządku). Nie musisz także zmieniać domyślnego MapRoute (tak, aby działały również adresy URL nieobsługujące lokalizacji), wystarczy dodać dodatkową trasę. – kmp

+0

Czy możesz (lub ktoś) napisać kod, w którym wybieram ** Resources.en-US.resx ** zamiast ** Resources.resx ** z folderu _App_GlobalResources_? – Misi

4

Sprawdź to Blog. Bez zmiany domyślnego MapRoute.

_Layout.cshtml strony:

@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> 

Kultura jest ustawiony w pliku _PageStart.cshtml:

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

Ostatnia strona to strona domyślna sama:

@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

Powiązane problemy