1

我在 .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);
        }

资源文件命名为:

  1. General.fr.resx => 法语
  2. General.resx => 英语
  3. General.nl.resx => 荷兰语

现在显然这不起作用。我似乎找不到任何我正在尝试做的事情的例子。我能找到的所有示例都刷新了页面。

所以我有两个问题:

  1. 这可以做到吗?如果是,我怎么做错了?
  2. 如果无法做到这一点,那么什么是好的解决方案?目前在操作结束时重定向似乎不会更改语言设置。
4

2 回答 2

1

You have to store the changed language settings by the user in cookie or session and in the Application_AcquireRequestState of Global.asax.cs set the CurrentUICulture and CurrentCulture for the Thread.CurrentThread from the language stored in cookie/session.

You can also store the user's preferred language in database and by this way the user don't need to set the language every time logs-in.

于 2012-08-31T11:36:30.677 回答
0

一种可能的方法是将您的链接放在 a 中Partial View,并在您更改文化后让您的 Action 返回部分视图。

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

         return PartialView("YourPartialView");
    }

可以从 jquery/ajax 调用中调用此操作,因此您会看到不会发生回发

于 2012-08-31T11:25:09.937 回答