2015-03-13 64 views
0

我有一个ASP.NET MVC应用程序。这个应用程序允许用户设置文化来查看应用程序的内容。为此,用户访问~/user/language。他们选择语言并点击“保存”按钮。在我的控制器中,我有以下内容:ASP.NET MVC - 设置文化信息

CultureInfo ci = new CultureInfo(model.Culture); 
Thread.CurrentThread.CurrentCulture = ci; 
Thread.CurrentThread.CurrentUICulture = ci; 
return View(model); 

当视图重新加载时,字符串已被翻译成像我所期望的那样。但是,如果我访问应用中的另一个页面,字符串不会像我所期望的那样翻译。这就像文化信息没有被保存下来或线程被杀害。

我在做什么错?

+0

您正在设置当前线程。当新的请求进入时,它被分配一个新的线程。最好的办法是将用户选择的文化保存到cookie中,并为每个进入控制器的请求进行设置。 – heymega 2015-03-13 12:54:37

回答

1

@heymega是正确的。目前的文化是不持久的。您必须在每个请求的开始处加载。您需要将文化设置为持久位置(例如cookie),然后将文化设置为Application_BeginRequest事件中的线程。

比使用cookie更好的方法是将文化构建到URL中。

http://www.somesite.com/es-MX/somewhere 
http://www.somesite.com/en-US/somewhere 

这是搜索引擎的期望,这意味着用户可以通过切换网址,轻松切换文化,你不必跟踪文化对每个用户的基础。但是,您仍然需要根据URL在每个请求的开始处设置区域性。

+0

我喜欢将它嵌入网址并允许用户破解它的想法。好一个 – heymega 2015-03-13 13:56:01