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

Многоязычное веб-приложение - как определить язык пользователя в ASP.NET?

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

Кто-нибудь это сделал, или у вас есть какие-то мысли о том, как я могу получить это значение? Поскольку ASP.NET является серверным, у меня нет доступа к определенным настройкам браузера.

РЕШЕНИЕ. Вот что я в итоге сделал. Я использовал "для каждого", чтобы пройти через "HttpContext.Current.Request.UserLanguages" и искать один, который я поддерживаю. Я на самом деле просто проверяю двух оставшихся символов, поскольку пока мы не поддерживаем никаких диалектов - просто английский и испанский. Спасибо за помощь!

4b9b3361

Ответ 2

Попробуйте это в web.config:

<globalization culture="auto" uiCulture="auto" />

Это заставит ASP.NET автоматически определять культуру клиента из заголовка запроса. Вы также можете установить это для каждой страницы через атрибут страницы.

Ответ 3

Это отличный вопрос, поскольку многие разработчики пропускают локализацию в ASP.NET.

ASP.NET должен автоматически выбирать настройки браузера пользователя и принудительно использовать CultureInfo.CurrentCulture на языке браузера пользователя. Вы можете задать проблему с помощью строки в Page_OnInit(), например:

Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);

Как вы можете это проверить? Войдите в панель языков в нашем браузере и измените настройки.

Ответ 4

Клиент обычно устанавливает Accept-Language в заголовке HTTP-запроса с количественно забитым списком предпочтительного языка, условно (но не обязательно) в порядке предпочтения наименее благоприятствуемым. Вы можете разобрать это, но, как отметил Максэм, ASP.NET имеет механизм для этого от вашего имени.

Ответ 6

    /// <summary>
    /// Sets a user Locale based on the browser Locale setting. If no setting
    /// is provided the default Locale is used.
    /// </summary>

public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture)
{
    HttpRequest Request = HttpContext.Current.Request;
    if (Request.UserLanguages == null)
        return;

    string Lang = Request.UserLanguages[0];
    if (Lang != null)
    {
        // *** Problems with Turkish Locale and upper/lower case
        // *** DataRow/DataTable indexes
        if (Lang.StartsWith("tr"))
            return;

        if (Lang.Length < 3)
            Lang = Lang + "-" + Lang.ToUpper();
        try
        {
            System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang);
            if (CurrencySymbol != null && CurrencySymbol != "")
                Culture.NumberFormat.CurrencySymbol = CurrencySymbol;

            System.Threading.Thread.CurrentThread.CurrentCulture = Culture;

            if (SetUiCulture)
                System.Threading.Thread.CurrentThread.CurrentUICulture = Culture;
        }
        catch
        { ;}
    }
}

Источник этой статьи находится здесь: Как определить язык браузера