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

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

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

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

Ответы [ 6 ]

21 голосов
/ 02 ноября 2008

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

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

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

6 голосов
/ 02 ноября 2008

Эта статья (ссылка на archive.org, поскольку исходная ссылка теперь не работает) может быть полезна для автоматического определения языковых настроек браузера.

[ПРАВКА] Да. В цитируемой статье не используется ASP.NET. Это статья делает.

2 голосов
/ 23 апреля 2011

Request.UserLanguages ​​в ASP.NET 4 анализирует это как строковый массив.

Хорошая информация: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

2 голосов
/ 02 ноября 2008

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

2 голосов
/ 02 ноября 2008

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

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

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

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

1 голос
/ 08 июля 2013
    /// <summary>
    /// Sets a user's Locale based on the browser's 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
        { ;}
    }
}

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

...