问题转换文化

时间:2010-07-27 23:24:20

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

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

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

如果我查看调试文化是否正确更改,但在索引重定向中,cultureUI不会更改。

我正在尝试使用visual studio web服务器(Cassini)。

谢谢

2 个答案:

答案 0 :(得分:0)

我们从视图中的链接做同样的事情。但是,我们不会将代码放在操作中,而是放在基本控制器类上的方法。这是行动:

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");
        }
    }

这是基本Controller类中的方法:

 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();
    }

答案 1 :(得分:0)

我已经解决了在global.asax中添加此方法的问题:

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

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

通过这种方式我不使用cookie,我不需要从基础控制器继承任何控制器。

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