我正在使用.NET Framework 4中的EF 5在asp.net mvc 4中工作(感谢Azure尚未成为4.5)。 我试图让用户通过按下按钮来更改当前的语言设置。需要更改的内容保存在资源文件中。
首先我在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);
}
资源文件名为:
现在显然这不起作用。我似乎无法找到任何我想要做的例子。我能找到的所有例子都会刷新页面。
所以我有两个问题:
答案 0 :(得分:1)
您必须将用户更改的语言设置存储在Cookie或会话中,并Application_AcquireRequestState
Global.asax.cs
为CurrentUICulture
和CurrentCulture
设置Thread.CurrentThread
来自存储在cookie / session中的语言。
您还可以将用户的首选语言存储在数据库中,这样用户每次登录时都不需要设置语言。
答案 1 :(得分: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调用调用此操作,因此您看不到回发将会发生