2015-03-13 60 views
0

我有一個ASP.NET MVC應用程序。這個應用程序允許用戶設置文化來查看應用程序的內容。爲此,用戶訪問~/user/language。他們選擇語言並點擊「保存」按鈕。在我的控制器中,我有以下內容:ASP.NET MVC - 設置文化信息

CultureInfo ci = new CultureInfo(model.Culture); 
Thread.CurrentThread.CurrentCulture = ci; 
Thread.CurrentThread.CurrentUICulture = ci; 
return View(model); 

當視圖重新加載時,字符串已被翻譯成像我所期望的那樣。但是,如果我訪問應用中的另一個頁面,字符串不會像我所期望的那樣翻譯。這就像文化信息沒有被保存下來或線程被殺害。

我在做什麼錯?

+0

您正在設置當前線程。當新的請求進入時,它被分配一個新的線程。最好的辦法是將用戶選擇的文化保存到cookie中,併爲每個進入控制器的請求進行設置。 – heymega 2015-03-13 12:54:37

回答

1

@heymega是正確的。目前的文化是不持久的。您必須在每個請求的開始處加載。您需要將文化設置爲持久位置(例如cookie),然後將文化設置爲Application_BeginRequest事件中的線程。

比使用cookie更好的方法是將文化構建到URL中。

http://www.somesite.com/es-MX/somewhere 
http://www.somesite.com/en-US/somewhere 

這是搜索引擎的期望,這意味着用戶可以通過切換網址,輕鬆切換文化,你不必跟蹤文化對每個用戶的基礎。但是,您仍然需要根據URL在每個請求的開始處設置區域性。

+0

我喜歡將它嵌入網址並允許用戶破解它的想法。好一個 – heymega 2015-03-13 13:56:01