2011-12-28 3 views
0

en-US, pt-BR, es-ES에 대한 현지화 지원이 포함 된 웹 응용 프로그램 (ASP.NET MVC 3)이 있습니다.왜 RedirectToAction이 ThreadID를 변경합니까?

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
    int threadId = Thread.CurrentThread.ManagedThreadId; 
    string threadUICulture = Thread.CurrentThread.CurrentUICulture.ToString(); 
    return View(); 
    } 
} 

public class LanguageController : Controller 
{ 
    public ActionResult EN() 
    { 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
    return RedirectToAction("Index", "Home"); 
    } 

    public ActionResult ES() 
    { 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-ES"); 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES"); 

    int threadId = Thread.CurrentThread.ManagedThreadId; 
    return RedirectToAction("Index", "Home"); 
    } 

    public ActionResult PT() 
    { 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR"); 
    return RedirectToAction("Index", "Home"); 
    } 
} 

가 나는 ActionLink로, 나는 언어/ES 스페인어로 변경하고 인덱스 페이지로 리디렉션 전화 EN-US 문화와 응용 프로그램을 시작합니다. 하지만 작동하지 않는 색인 페이지는 영어로 표시됩니다 ...

스레드 ID는 LanguagesController.ES 및 HomeController.Index 메소드에서 다릅니다.

ASP.NET MVC 앱에서 현지화를 관리하는 가장 좋은 방법은 무엇입니까?

+0

다음은 올바른 방향으로 나아갈 수있는 기사입니다. http://blog.stevelydford.com/2011/01/asp-net-mvc-3-internationalization/ –

+0

각 요청은 다른 스레드에 의해 처리됩니다. –

답변

0

컨트롤러의 설정 문화권이 작동해야한다고 생각합니다.

세션 [ "Culture"] = 새 CultureInfo ("es-ES");

또는

HttpContext.Session [ "배양"]은 CultureInfo를 새로운 = ("ES-ES");

1

각 요청이 스레드 풀에서 가져온 스레드에서 제공되기 때문에 이런 현상이 발생합니다. 따라서 첫 번째 요청이 스레드 A에서 제공 될 수 있지만 두 번째 요청은 스레드 B에서 제공 될 수 있습니다. 현재 문화권에 대한 정보를 어딘가에 유지해야합니다. 이것은 세션, 쿠키, URL 경로 매개 변수 등일 수 있습니다. 다음을보십시오 : localization guide.

관련 문제