2012-01-07 86 views
0

我有一些代碼,當我通過更改CurrentCultureCurrentUICulture,但沒有從.resx文件中獲取相關字符串時,它只採用默認文化中的一個。任何人可以幫助,這是我的代碼:MVC和全球化

<map id="langs" name="langselect"> 
      <area shape="rect" coords="0,0,18,11" alt="en-GB" onmouseover="tooltip.show('en-GB', 60);" onmouseout="tooltip.hide();" onclick="setCulture('en-GB');" /> 
      <area shape="rect" coords="25,1,41,11" alt="fi-FI" onmouseover="tooltip.show('fi-FI', 48);" onmouseout="tooltip.hide();" onclick="setCulture('fi-FI');" /> 
     </map> 

function setCulture(culture) { 

    $.post('/Gameplan/MainGP/SetCulture', { culture: culture }, function (result) { 

    }); 

} 

public void SetCulture(string culture) 
    { 
     Thread.CurrentThread.CurrentCulture = new CultureInfo(culture); 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture); 

    } 

編輯:我已經添加了下面的代碼,但我仍然有同樣的問題:

public void SetCulture(string culture) 
    { 
     Session["Culture"] = culture; 
     Thread.CurrentThread.CurrentCulture = new CultureInfo(Session["Culture"].ToString()); 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["Culture"].ToString()); 
    } 

protected void Application_AcquireRequestState(object sender, EventArgs e) 
    { 
     Thread.CurrentThread.CurrentCulture = new CultureInfo(Session["Culture"].ToString()); 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["Culture"].ToString()); 
    } 
+0

這幾乎是我的工作方式 - 你的資源文件是正確的(我知道這似乎是一個愚蠢的問題,但簡單的錯誤往往是最難發現的) – 2012-01-07 22:33:12

+0

我也在'web.config'系統中有這個。 web部分''但這是因爲我從瀏覽器中選擇了首選語言 - 不應該對您造成影響,我不認爲。 – 2012-01-07 22:39:44

+0

我現在可以使用上面的代碼來實現這個功能,但只能在刷新頁面之後才能使用。我真的需要通過點擊上面代碼中的標誌圖像來更改語言,而不必單擊瀏覽器中的刷新。 – user517406 2012-01-07 22:48:05

回答

0

您需要保存在某個地方文化(餅乾/會話/任何)並將其應用於每個請求。

在global.asax中的ASP.Net MVC AquireRequestState似乎是一個可以讓代碼應用文化的好地方。