Ответ 1
Ну, я на самом деле не нашел, что отвечает за настройку IIS, но я переопределил его в Application_PreRequestHandlerExecute(), и он, наконец, работал:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
Это более конкретная и более чистая версия этого вопроса - Различные параметры DateTimeFormat для среды разработки и тестирования
В Application_BeginRequest() методе global.asax.cs в моем проекте ASP.NET MVC есть код:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
Когда я устанавливаю точку останова на Action Controller, я вижу следующее значение Thread.CurrentThread.CurrentCulture:
Вопрос: какие настройки в IIS отвечают за это и как я могу его переопределить?
Ну, я на самом деле не нашел, что отвечает за настройку IIS, но я переопределил его в Application_PreRequestHandlerExecute(), и он, наконец, работал:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
Вместо того, чтобы устанавливать культуру Thread, вы можете указать ее в файле web.config следующим образом:
<configuration>
<system.web>
<globalization uiCulture="en-GB" culture="en-GB" />
</system.web>
</configuration>
Это более "правильный" способ указать культуру в ASP.NET.
Я думаю, что это хороший вариант, чтобы позволить клиенту (то есть пользовательскому агенту/браузеру) решить, какую именно культуру он хочет.
Это можно сделать, установив атрибут culture
и uiCulture
элемента globalization
в web.config на auto
. См. "Версия 1".
Вы также можете сделать что-то вроде: Возьмите настройку broswers, но если вы не можете использовать en-US
как запасное значение. См. "Версия 2".
Версия 1:
<configuration>
<system.web>
<globalization culture="auto" uiCulture="auto"/>
</system.web>
</configuration>
Версия 2:
<configuration>
<system.web>
<globalization culture="auto:en-US" uiCulture="auto:en-US" />
</system.web>
</configuration>
См. также эту статью для получения дополнительной информации: Автоматическое обнаружение и настройка ASP.NET Locale на основе локали браузера
Чтобы установить стандартную культуру для вашего приложения в MVC, вы можете легко добавить этот маршрут в класс RouteConfig:
foreach (var route in routes.Cast<Route>().Where(route =>
route.GetType() == typeof(MultiLingualRoute)))
{
route.Url = "{language}/" + route.Url;
route.Defaults.Add("language", "YOUR-DEFAULT");
}