CultureInfo.CurrentCulture дает мне неправильную культуру - PullRequest
8 голосов
/ 28 июня 2010

Я пытаюсь получить страну своих клиентов, поэтому я использую CultureInfo.CurrentCulture.Проблема в том, что когда мои канадские клиенты используют мой веб-сайт, они отображаются как американские.

Похоже, CultureInfo. CurrentCulture возвращает страну моего сервера вместо своей страны.Так как мне получить страну моих клиентов?

Ответы [ 3 ]

18 голосов
/ 25 сентября 2010

Вам просто нужно установить атрибут culture на auto в вашем файле web.config:

<system.web>
    <globalization culture="auto" />
<system.web>

Это автоматически установит CurrentCulture в культуру клиента.

Вы также можете установить uiCulture на auto, если вы используете локализованные ресурсы.

2 голосов
/ 01 декабря 2016

В моем случае на моей машине изначально был установлен английский - Великобритания.Я добавил английский - американский язык и установил его по умолчанию.Я также проверил, что США были правильно установлены в реестре.К сожалению, System.Threading.Thread.CurrentThread.CurrentCulture все еще показывал неправильную культуру, Великобритания.Я обнаружил, что вам нужно установить языковые параметры.Скачать языковой пакет, почерк и речь.

Даже тогда культура была неправильной.По всей машине будет отображаться Великобритания, и после того, как я установил языковой пакет для США, меню «Пуск» стало совершенно безумным.Я сдался и переустановил ОС, используя англо-американскую версию.

2 голосов
/ 28 июня 2010

Полагаю, вам нужно написать код для , чтобы прочитать культуру пользователя из входящего запроса браузера и настроить для него свой CultureInfo.

Этот сотрудник описывает, как они это делают: установить культуру отображения для текущего потока в соответствии с наиболее подходящей культурой из входящего Http-объекта пользователя "*".

У него там прекрасное обсуждение, но в основном он так и делает:

В Page_Load они делают этот вызов: UIUtilities.setCulture(Request);

Где это то, что называется:

/// Set the display culture for the current thread to the most
/// appropriate culture from the user's incoming Http "request" object.
internal static void setCulture(HttpRequest request)
{
    if (request != null)
    {
      if (request.UserLanguages != null)
      {
        if (request.UserLanguages.Length > -1)
        {
          string cultureName = request.UserLanguages[0];
          UIUtilities.setCulture(cultureName);
        }
      }
        // TODO: Set to a (system-wide, or possibly user-specified) default
        // culture if the browser didn't give us any clues.
    }
}

/// Set the display culture for the current thread to a particular named culture.
/// <param name="cultureName">The name of the culture to be set 
/// for the thread</param>
private static void setCulture(string cultureName)
{
    Thread.CurrentThread.CurrentCulture = 
        CultureInfo.CreateSpecificCulture(cultureName);
    Thread.CurrentThread.CurrentUICulture = new
        CultureInfo(cultureName);
}
...