【问题标题】:Setting Culture for ASP.NET MVC application on VS dev server and IIS在 VS 开发服务器和 IIS 上为 ASP.NET MVC 应用程序设置文化
【发布时间】:2011-11-05 04:11:39
【问题描述】:

这是这个问题的更具体和更清晰的版本 - Different DateTimeFormat for dev and test environment

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

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

当我在控制器操作上设置断点时,我看到 Thread.CurrentThread.CurrentCulture 的以下值:

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

问题是 - IIS 中的哪些设置对此负责,我该如何覆盖它?

【问题讨论】:

  • 我无法立即看出与您之前的问题有什么不同。如果有,您应该链接到它并说明区别。
  • 我是 StackOverflow 的新手,所以请告诉我适当的方法。我创建了这个问题,因为它比旧问题更具体、更清晰。我已通过指向当前问题的链接对旧问题进行了更新。

标签: c# asp.net-mvc iis


【解决方案1】:

您可以在 web.config 中指定它,而不是设置线程的文化,如下所示:

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

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

【讨论】:

  • @Traumer:在一个“新的和改进的”问题中,您应该提到这一点。此外,所有客户端和服务器的系统和浏览器语言设置的完整列表也会很好。
  • 感谢您的建议。我将来会使用它。但是对于这个问题,我已经找到了解决方案。
  • 嗨,谢谢,添加 web.config 使我的日期格式起作用,但是是否可以通过这种方式在 mvc 中直接添加全球化@using System.Web.WebPages uiCulture="en-GB" culture="en-GB",但日期格式不起作用,它只是在视图中显示为文本,我发现了这个想法here
【解决方案2】:

好吧,我实际上并没有找到 IIS 设置的原因,但我已经在 Application_PreRequestHandlerExecute() 中覆盖了它,它终于奏效了:

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

【讨论】:

    【解决方案3】:

    我认为让客户端(即用户代理/浏览器)决定他想要什么文化是一个不错的选择。 这可以通过将 web.config 中 globalization 元素的 cultureuiCulture 属性设置为 auto 来完成。请参阅“版本 1”。

    您还可以执行以下操作:采用 broswers 设置,但如果不可行,请使用 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>
    


    更多信息请参见这篇文章:Auto Detecting and Setting ASP.NET Locale based on Browser Locale

    【讨论】:

      【解决方案4】:

      要在 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");
      
                   }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        • 2011-07-11
        • 2016-01-18
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多