2010-04-20 5 views
32

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

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

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

var browserCulture = this.clientInformation.browserLanguage; 

Любая информация будет здорово!

+3

Под «культурой» вы подразумеваете текущую настройку локали, установленную в браузере? (Я никогда не слышал, что называется «культура» раньше, но я некультурный.) – Pointy

+0

Да, это именно то, что я имею в виду. Я привык работать с asp-локализацией, и именно так оно и называется. Поэтому мой охват по нему, называемый «культура», ограничен. Неудивительно, что мне было так сложно найти эту информацию в Интернете! –

+0

Это связанный с этим вопрос: http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference – Damien

ответ

63

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

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

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

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

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

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

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

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

+3

См. Https://developer.mozilla.org/en-US/docs/Web/API/window.navigator.language ... все браузеры с этого времени используют значение в Accept-Language для своего языкового свойства. Больше не беспокойтесь об этом. – timdream

+3

@timdream Осторожно, фраза «все браузеры» кажется немного ошибочной, учитывая, что в документе, на котором вы ссылались, говорится, что 'window.navigator.language' не поддерживается в IE и требует запатентованной IE-опции. – yochannah

+2

Я думаю, что этот документ также ошибочен в отношении Chrome-я всегда получаю на языке браузера * не * первый язык настроек. Единственным браузером, где я вижу первый язык настроек, является Firefox, так далеко от «всех браузеров». Даже тогда это субоптимально, потому что вы получаете только первый язык: если пользователь сказал «дайте мне английский по своему усмотрению и по-французски, если у вас его нет», но у вас есть только французский и немецкий языки, это второе предпочтение не будет подобрал. – bobince

12

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

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

+3

navigator.userLanguage не работает для IE11 – ses

+0

понимает, что это немного устарело, но только для любой, кто сейчас сталкивается с этим (например, я), navigator.language работает для IE 11, поэтому этот код должен работать нормально. – TygerKrash

6

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

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

Просто, чтобы быть чистым.

0

Чтобы получить локаль в 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); 
Смежные вопросы