2013-06-02 24 views
3

我有我想要支持的每種語言,命名爲喜歡下面幾個資源文件:如何使用ASP .NET MVC中的Resources和CultureInfo更改網站語言?

NavigationMenu.en-US.resx 
NavigationMenu.ru-RU.resx 
NavigationMenu.uk-UA.resx 

文件位於MySolution/Resources/NavigationMenu文件夾中。

我有這臺CurrentCultureCurrentUICulture像下面

public ActionResult SetLanguage(string lang) 
{ 
    try 
    { 
     Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang); 
     Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang); 
     return Redirect(Request.UrlReferrer.AbsoluteUri); 
    } 
    catch(Exception) 
    { 
     return RedirectToAction("Index"); 
    } 
} 

lang參數值uk-UAru-RUen-US取決於被點擊鏈接什麼在我看來動作。另外我有web配置全球化定義部分:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="ru-RU" uiCulture="ru-RU" /> 

當我的應用程序啓動我預期俄語,但是當我試圖改變我的語言與SetLanguage行動英語我得到了我的觀點沒有語言的變化。 NavigationMenu.SomeProperty仍然是俄羅斯。我錯過了什麼?

+0

這在我看來是一個更好的答案: http://stackoverflow.com/questions/1560796/set-culture-in-an-asp-net-mvc-app/1561583#1561583 –

回答

4

您正在更新當前線程的文化。

大多數網站都支持本地化,因此將其作爲其URL的一部分(在所有網頁中)。使用MVC,您可以通過使用動作過濾器處理文化來實現此方法。 This answer對此有一個很好的解決方案。

除此之外,您需要通過將文化持久化到會話或cookie,然後在每個請求上再次更新線程的區域性,再次通過實現動作過濾器或在包含應用程序事件請求上下文,比如AquireRequestState。

3

在您的SetLanguage()例如cookie中保留您的語言,然後在BaseControllerActionFilter(推薦)中獲取來自cookie的值並相應地更新線程。
如果這沒有任何意義,請看下面的好文章;
CodeProject上http://www.codeproject.com/Articles/526827/MVC-Basic-Site-Step-1-Multilingual-Site-Skeleton
而這一次http://afana.me/post/aspnet-mvc-internationalization.aspx
e.g;

// Save culture in a cookie 
     HttpCookie cookie = Request.Cookies["_culture"]; 
     if (cookie != null) 
      cookie.Value = culture; // update cookie value 
     else 
     { 

      cookie = new HttpCookie("_culture"); 
      cookie.HttpOnly = false; // Not accessible by JS. 
      cookie.Value = culture; 
      cookie.Expires = DateTime.Now.AddYears(1); 
     } 
     Response.Cookies.Add(cookie); 
+2

這是不是從SEO角度來看最好的做法。請參閱https://support.google.com/webmasters/answer/182192?hl=zh_CN。 「將每種語言的內容保存在不同的網址上,不要使用cookies來顯示網頁的翻譯版本,而是考慮將網頁的每種語言版本交叉鏈接,這樣,法語用戶登錄德語版的網頁只需點擊一下即可獲得正確的語言版本。「 –

+0

@JonRea同意但這是一個快速和骯髒的方式。是的,有時你不需要搜索引擎優化,如應用程序的管理區域或私人本地部署的應用程序。 –

相關問題