ASP.NET MVC - 设置文化信息
ASP.NET MVC - Set Culture Info
我有一个 ASP.NET MVC 应用程序。此应用程序允许用户设置文化以查看应用程序的内容。为此,用户访问 ~/user/language
。他们选择语言并单击 "Save" 按钮。在我的控制器中,我有以下内容:
CultureInfo ci = new CultureInfo(model.Culture);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
return View(model);
重新加载视图时,字符串已按照我的预期进行了翻译。但是,如果我访问应用程序中的另一个页面,则字符串不会像我预期的那样被翻译。这就像文化信息没有被保留或线程被杀死。
我做错了什么?
@heymega 是正确的。当前文化是非持久性的。您必须在每个请求开始时加载。您需要将文化设置为持久位置(例如 cookie),然后将文化设置为 Application_BeginRequest
事件中的线程。
比使用 cookie 更好的方法是将文化融入 URL。
http://www.somesite.com/es-MX/somewhere
http://www.somesite.com/en-US/somewhere
这是搜索引擎所期望的,这意味着用户可以通过切换 URL 轻松切换文化,而您不必跟踪每个用户的文化。但是,您仍然需要根据 URL.
在每个请求的开头设置文化
我有一个 ASP.NET MVC 应用程序。此应用程序允许用户设置文化以查看应用程序的内容。为此,用户访问 ~/user/language
。他们选择语言并单击 "Save" 按钮。在我的控制器中,我有以下内容:
CultureInfo ci = new CultureInfo(model.Culture);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
return View(model);
重新加载视图时,字符串已按照我的预期进行了翻译。但是,如果我访问应用程序中的另一个页面,则字符串不会像我预期的那样被翻译。这就像文化信息没有被保留或线程被杀死。
我做错了什么?
@heymega 是正确的。当前文化是非持久性的。您必须在每个请求开始时加载。您需要将文化设置为持久位置(例如 cookie),然后将文化设置为 Application_BeginRequest
事件中的线程。
比使用 cookie 更好的方法是将文化融入 URL。
http://www.somesite.com/es-MX/somewhere
http://www.somesite.com/en-US/somewhere
这是搜索引擎所期望的,这意味着用户可以通过切换 URL 轻松切换文化,而您不必跟踪每个用户的文化。但是,您仍然需要根据 URL.
在每个请求的开头设置文化