在VS dev服务器和IIS上为ASP.NET MVC应用程序设置文化

这是更具体和更清洁的这个问题的版本 – 开发和testing环境的不同的DateTimeFormat

在我的ASP.NET MVC项目中的global.asax.cs的Application_BeginRequest()方法中有代码:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); 

当我在Controller Action上设置断点时,我看到了Thread.CurrentThread.CurrentCulture的以下值:

  1. 在VS dev服务器 – “en-GB”
  2. 在IIS中 – “en-US”

问题是 – 什么设置在IIS负责这个,我怎么能覆盖它?

而不是设置线程的文化,你可以像这样在web.config中指定它:

 <configuration> <system.web> <globalization uiCulture="en-GB" culture="en-GB" /> </system.web> </configuration> 

这是在ASP.NET中指定文化的更“正确”的方式。

那么,我实际上没有find什么IIS设置负责,但我已经在Application_PreRequestHandlerExecute()覆盖它,它终于工作:

 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); 

我认为这是一个很好的select,让客户(即用户代理/浏览器)决定他想要的文化。 这可以通过将web.config中的globalization元素的cultureuiCulture属性设置为auto 。 请参阅“版本1”。

你也可以做这样的事情:采取交叉设置,但如果不是possbile使用en-US作为后备值。 请参阅“版本2”。

版本1:

 <configuration> <system.web> <globalization culture="auto" uiCulture="auto"/> </system.web> </configuration> 

版本2:

 <configuration> <system.web> <globalization culture="auto:en-US" uiCulture="auto:en-US" /> </system.web> </configuration> 

另请参阅本文以获取更多信息: 自动检测并设置基于浏览器语言环境的ASP.NET语言环境

要在MVC中为您的应用程序设置默认文化,您可以在RouteConfig类中轻松添加此路线

  foreach (var route in routes.Cast<Route>().Where(route => route.GetType() == typeof(MultiLingualRoute))) { route.Url = "{language}/" + route.Url; route.Defaults.Add("language", "YOUR-DEFAULT"); }