CurrentCulture incorrectly defaulting to en-US in ASP.net
I had the same problem and after many hours I found out that even though the regional settings were correct, I also needed to change the original culture for all the reserved accounts (e.g. ASP.NET).
This is done through the button "Copy Settings..." under the Administrative tab in Regional Settings. The settings are copied if you enable the checkbox "Welcome screen and system accounts".
These are alternative places where you could search:
I can't find anywhere that's settings the culture to 'en-US'... but something is.
Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US' Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'
Try looking for the InitializeCulture
method, this method is overridden in ASP.Net pages to set the Culture like:
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();
}
Try to look for the following assembly attributes:
[assembly: AssemblyCulture("en-US")]
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]
Try to look for the following page directive attributes:
<%@ Page Culture="en-US" UICulture="en-US" Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
Try to look in web.configs:
<globalization uiCulture="en-US" culture="en-US" enableClientBasedCulture="false" />
Edit 1
Try to look for HttpHandlers or HttpModules trying to set the language
Try to look in the web.config hierarchy (at the server, <wwwroot>
means the root folder of your IIS Web Site)
- Global machine.
<windir>\Microsoft.NET\Framework\<ver>\Config\Machine.config
- Root Web config.
<windir>\Microsoft.NET\Framework\<ver>\Config\Web.config
- Website.
<wwwroot>\Web.config
- Web application.
<wwwroot>\<webapp>\Web.config
- Folder.
<wwwroot>\<webapp>\<dir>\Web.config
If you have multiple servers (web farm), check you are being redirected to the correct server (the one you are checking the configuration), in order to do it you can use the ip of the desired server or configure your host files in your client computer
If I add a globalization section in the root web.config ( windir\Microsoft.NET\Framework\ver\Config\Web.config), set to en-GB, it does solve my problem and propagates down to the other sites. Which kinda solves my problem. Still doesn't explain where its getting en-US from by default though but it should do the trick. Thanks.
.Net web application is picking up your browser's default culture. For e.g. in FF, default language is set as shown in below image.
So, if you want your site's culture other than the one from browser, in page's InitializeCulture method (Create a BasePage and keep below code here and inherit existing pages from this 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();
}
}