CurrentCulture неправильно дефолт en-US в ASP.net

Я только что перенес около 100 ASP.net сайты от IIS 6 на Windows Sever 2003 до IIS 7 на Windows 2008. Я только что заметил, что различные части кода, которые используют такие вещи, как DateTime.Синтаксический анализ начал вызывать ошибки "строка не была распознана как допустимое DateTime". Я отследил это до того, что CurrentCulture сайтов по умолчанию "en-US", и поэтому мои пользователи в Великобритании вводят даты в неожиданном формате.

вопрос в том, где они получают en-US от? Начиная с вершины, если я посмотрю в "Панель управления > регион и язык", все настроено на английский (Великобритания). Сеть.конфигурации сайтов либо не имеют раздела , либо имеют значение . В "глобализации IIS7 - .Net" все сайты имеют свою культуру, установленную на " инвариантный язык (инвариантная страна)".

Я не могу найти нигде, что устанавливает культуру в "en-US"... но что-то есть.

Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US'
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'

Я могу исправить эту проблему, добавив в каждый веб.config, но я действительно не хочу вручную редактировать около 100 web.конфиги! Я не хочу, чтобы он унаследовал культуру от настроек ОС сервера, которые установлены в en-GB.

Я что-то пропустила?

7 ответов


это альтернативные места, где вы можете искать:

Я не могу найти нигде, что настройки культуры "en-US"... но что-то есть.

нить.CurrentThread.Свойства currentculture.Имя-вывода 'ан-Нас' Нитка.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" %>

попробуйте посмотреть в интернете.конфиги:

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

изменить 1

попробуйте найти HttpHandlers или HttpModules, пытающиеся установить язык

попробуйте посмотреть в интернете.иерархия конфигурации (на сервере,<wwwroot> означает корневую папку вашего IIS Web Сайт)

  1. мировая машина. <windir>\Microsoft.NET\Framework\<ver>\Config\Machine.config
  2. корень веб-конфигурации. <windir>\Microsoft.NET\Framework\<ver>\Config\Web.config
  3. сайт. <wwwroot>\Web.config
  4. веб-приложения. <wwwroot>\<webapp>\Web.config
  5. . <wwwroot>\<webapp>\<dir>\Web.config

если у вас несколько серверов (веб-ферма), проверьте, что вы перенаправлены на правильный сервер (тот, который вы проверяете конфигурацию), для этого вы можете использовать ip-адрес нужного сервера или настроить файлы хоста в своем клиенте компьютер!--12-->


Если я добавлю раздел глобализации в корневой сети.config (windir\Microsoft.NET\Framework\ver\Config\Web.config), установлен в en-GB, он решает мою проблему и распространяется на другие сайты. Что вроде как решает мою проблему. Все еще не объясняет, где его получение en-US по умолчанию, хотя, но он должен сделать трюк. Спасибо.


Он может исходить из культуры системной учетной записи, используемой для запуска пула приложений или веб-приложения.

проверьте эту ссылку: различные параметры культуры между IIS и ASP.NET


.Net web application подбирает культуру Вашего браузера по умолчанию. Например, в FF язык по умолчанию установлен, как показано на рисунке ниже. FF settings for Language

Итак, если вы хотите, чтобы культура вашего сайта отличалась от культуры браузера, в методе InitializeCulture страницы (создайте базовую страницу и сохраните ниже кода здесь и унаследуйте существующие страницы из этой базовой страницы).

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();
        }
    }

У меня была та же проблема, и через много часов я узнал, что, хотя региональные настройки были правильными, мне также нужно было изменить исходную культуру для все зарезервированные счета (например ASP.NET).

Это делается через кнопку "Настройки Копирования..." под административные на Региональные Параметры. Настройки копируются, если вы установите флажок"экран приветствия и система счета".


просто чтобы помочь кому-то получить ту же проблему....

после того, как попытался изменить культуру IIS, задавать глобализация и до сих пор unsecessfully, я сделал это в глобальном.асакс:

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;
} 

в моем случае мой пул приложений работал как пользователь домена, у которого была текущая культура en-GB, и приложение отлично работало с форматом даты en-GB.

Я изменил пул приложение для запуска под сетевой службой вместо этого и внезапно DateTime.Разбор вызовов были нарушены, как приложение теперь использует культуру en-US. Я видел некоторые сообщения SO (Эл.г) о том, как культуры IIS специфичны для пользователя, что объясняет это.

Открытие глобализации .NET корневого элемента в диспетчере IIS и установка культуры и культуры пользовательского интерфейса на английский язык (en-GB) исправили его для меня.