2012-08-31 28 views
1

我正在使用.NET Framework 4中的EF 5在asp.net mvc 4(感謝Azure不是4.5)。 我試圖讓用戶通過按下一個按鈕來改變當前的語言設置。需要更改的內容保存在資源文件中。更改文化上的actionlink點擊沒有刷新資源文件的頁面

首先我得到的瀏覽器設置在我的web.config

<globalization culture="auto" uiCulture="auto"/> 

然後我嘗試通過超鏈接進行更改。 下面是我使用的鏈接的例子:

<li>@Html.ActionLink("FR", "ChangeLanguage", "Account", new { language = "fr" }, null)</li> 
<li>@Html.ActionLink("EN", "ChangeLanguage", "Account", new { language = "en" }, null)</li> 
<li>@Html.ActionLink("NL", "ChangeLanguage", "Account", new { language = "nl" }, null)</li> 

以下是我填的文字:

@Html.Encode(MyProject.Web.Resources.General.Header_UserBadge_SettingsDeleteCurrentPicture) 

這裏就是他們連接到控制器動作:

public ActionResult ChangeLanguage(string language) 
     { 
      Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(language); 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language); 
     } 

資源文件命名爲:

  1. General.fr.resx =>法國
  2. General.resx =>英語
  3. General.nl.resx =>荷蘭

現在很明顯,這是行不通的。我似乎無法找到我想要做的事情的任何例子。我可以找到的所有示例刷新頁面。

所以我有2個問題:

  1. 可以這樣做?如果是的話,我做錯了什麼或是什麼?
  2. 如果這不能完成,那麼什麼是一個好的解決方案?目前在動作結束時重定向似乎並未改變語言設置。

回答

0

一種可能的方法是將您的鏈接放在Partial View中,並讓您的操作在您更改文化後返回部分視圖。

public ActionResult ChangeLanguage(string language) 
    { 
     Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(language); 
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language); 

     return PartialView("YourPartialView"); 
    } 

這個動作可以從一個jQuery/Ajax調用被調用,所以你看不到回傳會發生

+0

謝謝您的回覆。問題是我不能在部分視圖中製作整個GUI。由於我目前在部分視圖中也有我的佈局和菜單,因此我必須使用javascript或ajax加載每個頁面。 (除非我在這裏錯了)。編輯:佈局和菜單部分還包含需要更改用戶語言的元素,所以使我的意見部分意見將意味着我將不得不重新加載它們。這是我重新加載的整個頁面,這正是我想要反對的。 – whodares

+0

這**可能**幫助http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx – Yasser

1

你必須在cookie或會話的用戶和的Application_AcquireRequestState存儲更改的語言設置Global.asax.cs根據存儲在cookie/session中的語言爲Thread.CurrentThread設置CurrentUICultureCurrentCulture

您還可以將用戶的首選語言存儲在數據庫中,通過這種方式,用戶無需在每次登錄時都設置語言。

+0

謝謝,但這似乎只能在頁面刷新工作。我無法在沒有重定向的情況下工作。 – whodares

+0

你想更改顯示給用戶的html而不進行頁面刷新?這並不容易,你需要刷新,否則你必須使ajax調用來刷新整個頁面內容,但這不是一個好主意。 – VJAI

+0

我通過資源文件獲取html。例如:@ Html.Encode(MyProject.Web.Resources.General.Header_UserBadge_SettingsDeleteCurrentPicture)我希望我可以動態地改變它們,但如果這是不可能的,我只會使用頁面刷新。 – whodares