2011-12-28 2 views
0

私はen-US、pt-BR、es-ESのローカリゼーションをサポートするWebアプリケーション(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"] = new CultureInfo( "es-ES");

又は

HttpContext.Session [ "培養"] =新規のCultureInfo( "ES-ES")。

1

これは、各要求がスレッドプールから引き出されたスレッドから提供されるためです。したがって、最初のリクエストはスレッドAで処理できますが、2番目のリクエストはスレッドBで処理できます。現在のカルチャーに関する情報をどこかに残す必要があります。これは、セッション、クッキー、URLのルートパラメータなどです。localization guideを見てください。

関連する問題