我有一个Web应用程序(ASP.NET MVC 3),支持en-US,pt-BR,es-ES本地化。
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");
}
}
我使用文化en-US启动应用程序,使用ActionLink,我将语言/ ES调用为西班牙语并重定向到索引页面。但是不行,索引页仍然是英文...
我看到方法LanguagesController.ES和HomeController.Index上的Thread ID不同。
在ASP.NET MVC应用程序上管理本地化的最佳方法是什么?
答案 0 :(得分:1)
这是因为每个请求都是从线程池中提取的线程提供的。因此,虽然第一个请求可以在线程A上提供,但第二个请求可以在线程B上提供。您需要在某个地方保留有关当前文化的信息。这可能是:会话,cookie,一些URL路由参数等。看看以下localization guide。
答案 1 :(得分:0)
我认为,在您的控制器中,设置会话文化应该有效。
会话[“文化”] =新的CultureInfo(“es-ES”);
或
HttpContext.Session [“culture”] =新的CultureInfo(“es-ES”);