CurrentCulture在ASP.net中错误地默认为en-US

Sie*_*mos 26 asp.net globalization culture uiculture

我刚刚从Windows Sever 2003上的IIS 6迁移了大约100个ASP.net站点到Windows 2008上的IIS 7.我刚刚注意到使用DateTime.Parse之类的各种代码片段已经开始引发错误"字符串不是被认为是有效的DateTime".我已经跟踪了这一事实,即网站的CurrentCulture默认为"en-US",因此我的英国用户以意想不到的格式输入日期.

问题是,他们从哪里来到美国?从顶部开始,如果我查看"控制面板>区域和语言",一切都将设置为英语(英国).的网站的web.configs没有任一<全球化>部分或有它设置为<全球化文化="自动"的UICulture ="自动" />.在'IIS7 - .Net全球化'中,所有网站都将其文化设置为"不变语言(Invariant Country)".

我无法找到将文化设置为"en-US"的任何地方......但有些东西是.

Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US'
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'
Run Code Online (Sandbox Code Playgroud)

我可以通过在每个web.config中添加<globalization culture ="en-GB"uiCulture ="en-GB"/>来解决这个问题但是我真的不想手动编辑大约100个web.configs!我不想从服务器操作系统设置继承文化,这些设置设置为en-GB.

我错过了什么吗?

Jup*_*aol 26

这些是您可以搜索的替代地点:

我无法找到将文化设置为"en-US"的任何地方......但有些东西是.

Thread.CurrentThread.CurrentCulture.Name正在输出'en-US'Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol输出'$'

尝试寻找InitializeCulture方法,在ASP.Net页面中重写此方法以设置文化,如:

protected override void InitializeCulture()
{
    var hidden = this.Request.Form["hidden"];
    var culture = this.Request.Form[hidden];
    if (!string.IsNullOrWhiteSpace(culture))
    {
        this.Culture = culture;
        this.UICulture = culture;
    }

    base.InitializeCulture();
}
Run Code Online (Sandbox Code Playgroud)

尝试查找以下程序集属性:

    [assembly: AssemblyCulture("en-US")]
    [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]
Run Code Online (Sandbox Code Playgroud)

尝试查找以下页面指令属性:

    <%@ Page Culture="en-US" UICulture="en-US" Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
Run Code Online (Sandbox Code Playgroud)

尝试查看web.configs:

<globalization uiCulture="en-US" culture="en-US" enableClientBasedCulture="false" />
Run Code Online (Sandbox Code Playgroud)

编辑1

尝试寻找设置语言的HttpHandlers或HttpModules

尝试查看web.config层次结构(在服务器上,<wwwroot>表示IIS网站的根文件夹)

  1. 全球机器. <windir>\Microsoft.NET\Framework\<ver>\Config\Machine.config
  2. Root Web配置. <windir>\Microsoft.NET\Framework\<ver>\Config\Web.config
  3. 网站. <wwwroot>\Web.config
  4. Web应用程序. <wwwroot>\<webapp>\Web.config
  5. 夹. <wwwroot>\<webapp>\<dir>\Web.config

如果您有多个服务器(Web场),请检查您是否被重定向到正确的服务器(您正在检查配置的服务器),为了做到这一点,您可以使用所需服务器的IP或配置您的主机文件客户电脑


小智 5

我遇到了同样的问题,几个小时后我发现即使区域设置正确,我也需要更改所有保留帐户(例如 ASP.NET)的原始文化。

这是通过“区域设置”中“管理”选项卡下的“复制设置... ”按钮完成的。如果启用复选框“欢迎屏幕和系统帐户”,则会复制设置。