【问题标题】:Problem switching culture问题转换文化
【发布时间】:2010-07-27 23:24:19
【问题描述】:

我有 2 个用于切换文化的链接。 如果我单击一个链接,程序会使用以下代码调用一个方法:

        Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(ln);
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ln);
        return RedirectToAction("index");

如果我通过调试查看文化已正确更改,但在索引重定向中,文化 UI 未更改。

我正在本地尝试使用 Visual Studio Web 服务器(Cassini)。

谢谢

【问题讨论】:

  • 它不应该在您重定向时切换线程。以防万一,检查线程窗口以确保您仍在 Index 方法中的同一线程上。

标签: asp.net-mvc asp.net-mvc-2


【解决方案1】:

我们从视图上的链接做同样的事情。然而,我们并没有将代码付诸行动,而是将一个方法放在基本控制器类上。这是行动:

public ActionResult SetCulture(string cultureCode)
    {
        string returnUrl = string.Empty;
        if (Request != null)
        {
            returnUrl = Request.UrlReferrer.ToString();
            //Write to the cookie
            Response.Cookies.Add(new HttpCookie("Language", cultureCode));
        }

        if (!String.IsNullOrEmpty(returnUrl))
        {
            return this.Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("List");
        }
    }

这是控制器基类中的方法:

 protected override void ExecuteCore()
    {
        //Retrieve from cookies
        HttpCookie cultureCookie = Request.Cookies["Language"];
        if (cultureCookie != null)
        {
            string culture = cultureCookie.Value;
            if (!String.IsNullOrEmpty(culture))
            {
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture);
                Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);
            }
        }
        base.ExecuteCore();
    }

【讨论】:

    【解决方案2】:

    我已经解决了在 global.asax 中简单地添加这个方法:

       void Application_PostAcquireRequestState(object sender, EventArgs e)
     {
       Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageFromSession);
       Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(languageFromSession);
    }
    

    每次我在控制器中调用动作时都会调用此方法。

    这样我不使用 cookie,也不需要从基本控制器继承任何控制器。

    我认为这是更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2015-05-26
      • 2019-11-24
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多