我刚刚迁移约100个ASP.net网站从IIS 6的Windows Sever的2003到IIS 7的Windows 2008年我刚刚注意到,使用之类的东西DateTime.Parse不同的代码段已经开始踢了错误“字符串的不识别为有效的日期时间”。 我跟踪下来的事实,该网站的CurrentCulture被默认为“EN-US”等我的英国用户以意想不到的格式输入日期。
问题是,他们在哪里得到的en-US的? 从顶部开始,如果我期待在“控制面板>区域和语言”一切都设置为英语(英国)。 的网站的web.configs没有任一<全球化>部分或有它设置为<全球化文化=“自动”的UICulture =“自动” />。 在“IIS7 - .NET全球化”所有的网站都有自己的文化设置为“固定语言(不变地)”。
我找不到任何地方的设置文化“EN-US” ......但事情是。
Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US'
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'
我可以通过添加解决这个问题<全球化文化=“EN-GB”的UICulture =“EN-GB” />的每一个web.config中,但我真的不希望有手工编辑约100 web.configs! 我wan't它从服务器操作系统的设置,这些设置为en-GB传承文化。
我缺少的东西吗?
这些都是可供选择的地方,你可以搜索:
我找不到任何地方的设置文化“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();
}
试图寻找以下组件属性:
[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
尝试寻找HttpHandlers的或尝试的HttpModules设置语言
尝试在web.config层次看(在服务器上, <wwwroot>
意味着你的IIS Web站点的根文件夹)
- 全球机。
<windir>\Microsoft.NET\Framework\<ver>\Config\Machine.config
- 根网站配置。
<windir>\Microsoft.NET\Framework\<ver>\Config\Web.config
- 网站。
<wwwroot>\Web.config
- Web应用程序。
<wwwroot>\<webapp>\Web.config
- 夹。
<wwwroot>\<webapp>\<dir>\Web.config
如果你有多个服务器(Web场),检查你将被重定向到正确的服务器(正在检查的配置的一个),为了做到这一点,你可以使用所需的服务器的IP地址或配置您的主机文件在您的客户机
如果我的根web.config添加一个globalization节(WINDIR \ Microsoft.NET \框架\版本\ CONFIG \ Web.config文件),设置为en-GB,但它解决我的问题,并传播到其他站点。 这有点儿解决我的问题。 仍然没有解释它的地方得到的en-US从默认不过,但它应该做的伎俩。 谢谢。
我有同样的问题,很多小时后,我发现,即使区域设置是正确的,我也需要改变原有的文化进行保留的所有账户(如ASP.NET)。
这是通过按钮的区域设置 管理选项卡下进行“ 复制设置...”。 如果选中该复选框“ 欢迎屏幕和系统帐户 ”的设置被复制。
它可以来自用来运行应用程序池或Web应用程序的系统帐户的文化。
检查此链接: IIS和ASP.NET之间不同的文化设置
.NET Web应用程序正在加快浏览器的默认文化。 对于例如在FF,如示于下面的图像缺省语言被设置。
所以,如果你想比一个从浏览器,在网页的InitializeCulture方法等网站的文化(创建的BasePage并保持低于此代码,并继承这个BasePage的现有页面)。
protected override void InitializeCulture()
{
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("en-GB");
System.Threading.Thread.CurrentThread.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
base.InitializeCulture();
}
}
就我而言,我的应用程序池正在运行作为我的域用户,其中有当前区域性设置为en-GB,而应用程序工作正常使用EN-GB日期格式。
我改下网络服务来运行,而不是应用程序池,突然DateTime.Parse调用的应用程序现在使用EN-US区域性被打破。 我看到一些帖子SO( 例如,有关如何IIS文化是特定于用户,其解释)。
打开IIS管理器中的根元素的.NET全球化和文化都和UI文化设置为英国英语(EN-GB)修好了我。
只是为了帮助别人得到了相同的问题....
后试图改变IIS文化,集全球化和至今unsecessfully,我这样做是在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;
}
我花了几个小时试图找到我的情况的解决方案。 我Win10(英文版)下工作,但与俄罗斯的区域设置。 不过,我在我的应用程序,托管在IIS与ApplicationPoolIdentity了“EN-US”文化。 这解决了这个问题:
IIS -> Application Pools -> Advanced Settings -> Change "Load User Profile" to False