Вопрос по asp.net, culture, uiculture, globalization – CurrentCulture неправильно по умолчанию для en-US в ASP.net

25

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

Вопрос в том, откуда они попадают в США? Начиная сверху, если я посмотрю в панели управления & gt; Регион и язык & apos; все установлено на английский (Великобритания). Веб-конфигурации сайтов также не имеют & lt; глобализации & gt; раздел или установите его как & lt; globalization culture = & quot; auto & quot; UICulture = & Quot; Авто & Quot; / & GT ;. В «IIS7 - Глобализация .Net». для всех сайтов их культура установлена на «инвариантный язык (инвариантная страна)».

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

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

Я могу решить эту проблему, добавив & lt; globalization culture = "en-GB" UICulture = & Quot; ен-GB & Quot; / & GT; для каждого web.config НО я действительно не хочу вручную редактировать около 100 web.configs! Я хочу, чтобы он унаследовал культуру от настроек ОС сервера, которые установлены на en-GB.

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

Да, язык IE установлен на «английский (Великобритания) [en-GB]». Я получаю ту же проблему во всех браузерах. Siegemos
Кстати, как вы справляетесь с ресурсами? просто файлы RESX под App_GlobalResources или App_LocalResources ?? или они встроены в спутниковые сборки: Jupaol
App_LocalResources, но эта конкретная проблема связана с тем, что пользователи вводят дату, а DateTime.Parse завершается с ошибкой, поскольку она ожидает дату в США, которой она не должна быть. Я не обращаюсь конкретно к языку в коде, я использую Convert.ToDateTime для строки, полученной из элемента управления календаря. Я не передаю конкретную культуру где-либо в коде, я полагаюсь на сайт, чтобы выбрать эту культуру из настроек браузера пользователя. Siegemos
Кроме того, как вы определяете язык в коде, я имею в виду, вы сохраняете язык в куки? или это хранится в базе данных для текущего пользователя, возможно? Jupaol
Вы проверяли языковые параметры Internet Explorer? Веб-сайты используют эти языковые настройки для определения текущего языка Jupaol

Ваш Ответ

7   ответов
2

Например, в FF язык по умолчанию установлен, как показано на рисунке ниже.FF settings for Language

Таким образом, если вы хотите, чтобы культура вашего сайта отличалась от культуры браузера, в методе 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();
        }
    }
2

используемой для запуска пула приложений или веб-приложения.

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

0

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

Вместо этого я изменил пул приложений для запуска в сетевой службе, и внезапно перестали работать вызовы DateTime.Parse, поскольку приложение теперь использовало англо-американскую культуру. Я видел некоторые ТАК сообщения (например) о том, как культуры IIS зависят от пользователя, что объясняет это.

Открытие .NET Globalization для корневого элемента в IIS Manager и настройка и Culture и UI Culture на English UK (en-GB) исправили это для меня.

25

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 '$'

Попробуйте найти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" />
Edit 1

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

Попробуйте посмотреть в иерархии web.config (на сервере,<wwwroot> означает корневую папку вашего веб-сайта IIS)

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

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

Machine.config - Нет раздела о глобализации или упоминания о en-US Root web.config - Нет раздела о глобализации Веб-сайт - Нет раздела о глобализации Веб-приложение - Папка NA - NA :(. Siegemos
Да, если я добавлю его в файл web.config в разделе глобализации, в частности, "en-GB" тогда все в порядке, но я бы хотел избежать необходимости делать это для всех сайтов и столкнуться с проблемой того, откуда он на самом деле выходит из США, и изменить его на этом уровне, если это возможно. Siegemos
Я искал весь код в решении на предмет "en-US" и нет соответствующих происшествий. Дело в том, что это тот же код, который выполнялся на предыдущем сервере Windows 2003, и раньше это никогда не было проблемой, поэтому я думаю, что это не проблема кода, а где-то настройка сервера / IIS. Вопрос где? Siegemos
Если вы измените язык вручную в файле web.config, скажем, только для 2 или 3 случайных приложений, сможете ли вы получить язык желаний ?? Если да, вы бы отказались от вопросов развертывания
Между прочим, я не использовал Web Deploy для развертывания этих сайтов. Они изначально были настроены вручную. Siegemos
3

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

Это делается с помощью кнопки & quot;Copy Settings...& Quot; подAdministrative вкладка вRegional Settings, Настройки копируются, если вы включите флажок & quot;Welcome screen and system accounts& Quot ;.

0

После попытки изменить 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;
} 
4

ir \ Microsoft.NET \ Framework \ ver \ Config \ Web.config), выбрав en-GB, это решит мою проблему и распространится на другие сайты. Который вроде решает мою проблему. Тем не менее, он по-прежнему не объясняет, откуда он получает доступ к США по умолчанию, но это должно сработать. Благодарю.

Похожие вопросы