Как получить браузер предпочтения текущей локали, используя JavaScript? - PullRequest
38 голосов
/ 21 апреля 2010

Кто-нибудь знает, как получить культуру браузера от Firefox и Google Chrome, используя javascript? Примечание. Это веб-приложение asp.net 3.5.

Требуется попытаться установить культуру отображения приложения на основе культуры браузера. Я нашел очень мало кусочков информации для других браузеров, но, похоже, они не работают.

Я могу получить его в IE со следующим фрагментом кода:

var browserCulture = this.clientInformation.browserLanguage;

Любая информация была бы отличной!

Ответы [ 4 ]

70 голосов
/ 21 апреля 2010

Следующие свойства существуют для объекта navigator (который также может быть известен как clientInformation в IE, но нет никакой причины использовать это имя):

  • language (без IE, язык установки браузера)
  • browserLanguage (IE, язык установки браузера)
  • userLanguage (IE, настройка языка на уровне пользователя на уровне ОС)
  • systemLanguage (IE, язык установки ОС)

Но! Вы никогда не должны использовать ни одно из этих свойств! Во многих случаях они будут неправильным языком.

Ни один из них не отражает языковые настройки, которые пользователь фактически настраивает в пользовательском интерфейсе браузера «предпочитаемые языки», и их трудно изменить пользователям. Вы можете вызвать большое разочарование, используя любое из этих значений без дополнительного простого ручного способа переключения языков.

Правильное место, которое вы должны понюхать, чтобы решить, какой язык использовать по умолчанию, как настроено обычным пользовательским интерфейсом браузера, это заголовок Accept-Language, передаваемый вашему серверу в HTTP-запросе. Это ранжированный список предпочтительных языков, из которых вы можете выбрать, и это то, что ASP.NET использует для угадывания автоматической клиентской культуры, если вы ее используете.

К сожалению, это свойство недоступно в JavaScript!

Обычно вы используете серверную часть для синтаксического анализа заголовка Accept-Language и выбираете для него один подходящий язык. В ASP.NET вы можете получить предварительно отсортированный список из HttpRequest.UserLanguages ​​ и выбрать первый, который вам нравится.

Затем вы выплевываете это имя языка в элемент <script>, чтобы передать информацию о языке клиентской стороне.

12 голосов
/ 21 апреля 2010

Попробуйте это:

var l_lang;
  if (navigator.userLanguage) // Explorer
    l_lang = navigator.userLanguage;
  else if (navigator.language) // FF
    l_lang = navigator.language;
  else
    l_lang = "en";

Источник: http://forums.digitalpoint.com/showthread.php?t=631706

7 голосов
/ 28 января 2015

navigator.languages является массивом и содержит все выбранные языки по порядку. И работает только для Chrome и Firefox.

Это не то же самое, что navigator.language, и я имею в виду, что navigator.language не обязательно соответствует navigator.languages[0].

Просто чтобы было ясно.

0 голосов
/ 02 июля 2016

Чтобы получить локаль в IE, вам нужно написать код на стороне сервера. Я попытался с сервлетом и получил принятый язык IE. Он показывает языки, которые выбирает пользователь. Позвоните сервлету на стороне клиента и получите локаль.

String name=request.getHeader("accept-language");
        AcceptClass ac=new AcceptClass();
        ac.setAccLang(name);
        Gson gs=new Gson();
          String json = gs.toJson(ac);
          response.setContentType("application/json");
          response.getWriter().write(json);
...