在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的以下值:
- 在VS dev服务器 – “en-GB”
- 在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
元素的culture
和uiCulture
属性设置为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"); }