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

在ASP.net中,CurrentCulture错误地默认为en US,asp.net,globalization,culture,uiculture,Asp.net,Globalization,Culture,Uiculture,我刚刚将大约100个ASP.net站点从Windows Server 2003上的IIS 6迁移到Windows 2008上的IIS 7。我刚刚注意到,使用DateTime.Parse之类的各种代码开始出现错误“字符串未被识别为有效的DateTime”。我已经追踪到这样一个事实,即网站的当前文化默认为“en-US”,因此我的英国用户正在以意外的格式输入日期 问题是,他们从哪里得到我们?从顶部开始,如果我查看“控制面板>区域和语言”,所有内容都设置为英语(英国)。站点的web.configs没有节

我刚刚将大约100个ASP.net站点从Windows Server 2003上的IIS 6迁移到Windows 2008上的IIS 7。我刚刚注意到,使用DateTime.Parse之类的各种代码开始出现错误“字符串未被识别为有效的DateTime”。我已经追踪到这样一个事实,即网站的当前文化默认为“en-US”,因此我的英国用户正在以意外的格式输入日期

问题是,他们从哪里得到我们?从顶部开始,如果我查看“控制面板>区域和语言”,所有内容都设置为英语(英国)。站点的web.configs没有节或已将其设置为。在“IIS7-.Net全球化”中,所有网站都将其文化设置为“不变语言(不变国家)”

我找不到任何地方能让文化“恩我们”。。。但有些事情是这样的

Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US'
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'
我可以通过添加到每个web.config来解决这个问题,但我真的不想手动编辑大约100个web.config!我不想从服务器操作系统设置(设置为en GB)继承区域性


我遗漏了什么吗?

您可以在这些地方进行搜索:

我找不到任何地方能让文化“恩我们”。。。但有些事情是这样的

Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US'
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'
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();
}
尝试查找以下程序集属性:

    [assembly: AssemblyCulture("en-US")]
    [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]
    <%@ Page Culture="en-US" UICulture="en-US" Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
尝试查找以下页面指令属性:

    [assembly: AssemblyCulture("en-US")]
    [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]
    <%@ Page Culture="en-US" UICulture="en-US" Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

尝试在web.configs中查找:

<globalization uiCulture="en-US" culture="en-US" enableClientBasedCulture="false" />

编辑1 尝试查找试图设置语言的HttpHandler或HttpModule

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

  • 全球机器<代码>\Microsoft.NET\Framework\\Config\Machine.Config
  • 根Web配置<代码>\Microsoft.NET\Framework\\Config\Web.Config
  • 网站<代码>\Web.config
  • Web应用程序<代码>\\Web.config
  • 文件夹<代码>\\\Web.config

  • 如果您有多台服务器(web场),请检查是否将您重定向到正确的服务器(您正在检查配置的服务器),若要执行此操作,您可以使用所需服务器的ip或在客户端计算机中配置主机文件,前提是我在根web.config中添加了全球化部分(windir\Microsoft.NET\Framework\ver\Config\Web.Config),设置为en GB,它确实可以解决我的问题并传播到其他网站。这可以解决我的问题。尽管如此,仍然没有解释默认情况下它从何而来,但它应该做到这一点。谢谢。

    只是为了帮助别人解决同样的问题

    在尝试更改IIS区域性、设置全球化之后,到目前为止还未成功,我在Global.asax中执行了此操作:

    void Application_BeginRequest(Object sender, EventArgs e)
    {
        System.Globalization.CultureInfo newCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
    
        newCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
        newCulture.DateTimeFormat.DateSeparator = "/";
    
        System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;
    } 
    

    它可以来自用于运行应用程序池或Web应用程序的系统帐户的区域性

    检查此链接:
    .Net web应用程序正在选择浏览器的默认区域性。例如,在FF中,默认语言设置如下图所示

    因此,如果您希望站点的区域性不是来自浏览器的区域性,请使用页面的InitializeCulture方法(创建一个基本页面,并在此处保留以下代码,并从该基本页面继承现有页面)


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


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

    在我的例子中,我的应用程序池以我的域用户身份运行,当前区域性设置为en GB,并且应用程序使用en GB日期格式运行良好

    我将应用程序池改为在网络服务下运行,突然DateTime.Parse调用中断,因为应用程序现在使用的是en-US区域性。我看到一些关于IIS区域性如何特定于用户的SO帖子()解释了这一点


    在IIS管理器中打开根元素的.NET全球化,并将区域性和UI区域性设置为English UK(en GB)对我进行了修复。

    我花了数小时试图为我的案例找到解决方案。我在Win10(英文版)下工作,但使用俄语区域设置。不过,我得到了“en US”我的应用程序中的区域性,托管在具有ApplicationPoolIdentity的IIS上。这解决了问题:


    IIS->应用程序池->高级设置->将“加载用户配置文件”更改为False

    我也遇到了这个问题,但我解决了它。 必须设置以下值:

    CultureInfo.DefaultThreadCurrentCulture = "en-GB";
    CultureInfo.DefaultThreadCurrentUICulture = "en-GB";
    

    您是否检查了Internet Explorer语言选项?网站使用这些语言设置来确定当前语言是的,IE语言设置为“英语(英国)[en GB]’。我在所有浏览器中都会遇到同样的问题。顺便问一下,你是如何处理资源的?只是在App_GlobalResources或App_LocalResources下的RESX文件?或者它们是否嵌入到附属程序集中:还有,你如何确定代码中的语言,我的意思是,你是将语言保存在cookie中?还是为当前用户存储在数据库中?App_LocalResources,但这个特殊的问题与用户输入日期和日期时间有关。解析失败,因为它预期的是美国日期,而不是美国日期。我不是在代码中专门处理语言,而是在来自日历控件的字符串上使用Convert.ToDateTime。我没有在任何地方传递特定的区域性代码,我依靠网站从用户的浏览器设置中获取文化