Подтвердить что ты не робот

Настройка культуры для приложения ASP.NET MVC на VS dev-сервере и IIS

Это более конкретная и более чистая версия этого вопроса - Различные параметры DateTimeFormat для среды разработки и тестирования

В Application_BeginRequest() методе global.asax.cs в моем проекте ASP.NET MVC есть код:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

Когда я устанавливаю точку останова на Action Controller, я вижу следующее значение Thread.CurrentThread.CurrentCulture:

  • В VS dev сервер - "en-GB"
  • В IIS - "en-US"

Вопрос: какие настройки в IIS отвечают за это и как я могу его переопределить?

4b9b3361

Ответ 1

Ну, я на самом деле не нашел, что отвечает за настройку IIS, но я переопределил его в Application_PreRequestHandlerExecute(), и он, наконец, работал:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

Ответ 2

Вместо того, чтобы устанавливать культуру Thread, вы можете указать ее в файле web.config следующим образом:

<configuration>
    <system.web>
        <globalization uiCulture="en-GB" culture="en-GB" />
    </system.web>
</configuration>

Это более "правильный" способ указать культуру в ASP.NET.

Ответ 3

Я думаю, что это хороший вариант, чтобы позволить клиенту (то есть пользовательскому агенту/браузеру) решить, какую именно культуру он хочет. Это можно сделать, установив атрибут 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 на основе локали браузера

Ответ 4

Чтобы установить стандартную культуру для вашего приложения в 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");

             }