Проблема переключения культуры - PullRequest
0 голосов
/ 28 июля 2010

У меня есть 2 ссылки для переключения культуры. если я нажму одну ссылку, программа вызовет метод с таким кодом:

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

Если я смотрю с отладкой, культура корректно изменяется, но в перенаправлении Индекса CultureUI не изменяется.

Я пытаюсь локально с веб-сервером visual studio (Cassini).

спасибо

Ответы [ 2 ]

0 голосов
/ 29 июля 2010

Я решил добавить этот метод в global.asax:

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

Этот метод вызывается каждый раз, когда я вызываю действие в контроллере.

Таким образом, я не использую куки и мне не нужно наследовать какой-либо контроллер от базового контроллера. Я думаю, что это лучшее решение.

0 голосов
/ 28 июля 2010

Мы делаем то же самое по ссылкам в представлении. Однако мы не приводим код в действие, а используем метод базового класса контроллера. Это действие:

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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...