2012-01-07 205 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似乎是一个可以让代码应用文化的好地方。