2010-07-27 3 views
0

전환 문화를위한 링크가 2 개 있습니다. 내가 하나 개의 링크를 클릭하면, 프로그램이 코드와 메서드를 호출 : 내가 문화를 디버깅으로 보면문제점 교환 문화

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

이 제대로 변경하지만, 인덱스 재에서 cultureUI는 변경되지 않습니다.

저는 Visual Studio 웹 서버 (Cassini)를 사용하여 로컬로 시도하고 있습니다.

감사합니다.

+1

리디렉션 할 때 스레드를 전환해서는 안됩니다. 이 경우 스레드 창을 검사하여 Index 메서드의 동일한 스레드에 있는지 확인하십시오. –

답변

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

그리고 이것은 기본 컨트롤러 클래스의 방법입니다 :

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

내가 symply의 Global.asax에서이 방법을 추가 해결했습니다

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

이 메서드는 컨트롤러에서 액션을 호출 할 때마다 호출됩니다.

이렇게하면 쿠키를 사용하지 않고 기본 컨트롤러에서 컨트롤러를 상속 할 필요가 없습니다.

나는 더 나은 해결책이라고 생각합니다.