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

StackOverflow https://stackoverflow.com/questions/256229

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Попробуйте сделать это в web.config:

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

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

Запрос.Пользовательские языки в ASP.NET 4 анализирует это как массив строк.

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

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

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

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

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

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

    /// <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
        { ;}
    }
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top