Лучший способ определить локаль пользователя в браузере

Тот, который подсчитывает число между двумя датами

function (start, end) {
    return (end.getMonth() - start.getMonth()) / 3 + (end.getFullYear() - start.getFullYear()) * 3;
},    

, это тот, который сообщает dc.js, сколько баров планировать и, следовательно, насколько они должны быть широкими.

Я не проверял ваш код, поэтому могут быть другие проблемы, но в этом году четыре квартала, поэтому последнее число должно быть 4.

174
задан vaxquis 12 January 2018 в 04:15
поделиться

2 ответа

Надлежащий путь состоит в том, чтобы посмотреть на заголовок Принимать-языка HTTP, отправленный на сервер. Это содержит заказанный, взвешенный список языков, которые пользователь настроил их браузер для предпочтения.

К сожалению, этот заголовок не доступен для чтения в JavaScript; все, что Вы получаете, navigator.language, который говорит Вам, какая локализованная версия веб-браузера была установлена. Это - не обязательно то же самое как предпочтительный язык (языки) пользователя. На IE Вы вместо этого добираетесь systemLanguage (ОС установила язык), browserLanguage (то же как language) и userLanguage (пользователь настроил регион ОС), которые все столь же бесполезны.

Если бы я должен был выбрать между теми свойствами, то я осуществил бы сниффинг для userLanguage во-первых, отступание к language и только после этого (если они не соответствовали никакому доступному языку), смотрящий на browserLanguage и наконец systemLanguage.

Если можно поместить сценарий серверной стороны где-то в другом месте на сеть, которая просто читает заголовок Принимать-языка и слюну, это отступает как файл JavaScript со значением заголовка в строке, например:

var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';

затем Вы могли включать <сценарий src> указывающий на тот внешний сервис в HTML и использовать JavaScript для парсинга заголовка языка. Я не знаю ни о каком существующем коде библиотеки, чтобы сделать это, тем не менее, так как принимать-синтаксический-анализ-естественных-языков почти всегда делается на стороне сервера.

Независимо от того, что Вы заканчиваете тем, что делали, Вам, конечно, нужно пользовательское переопределение, потому что оно будет всегда не угадывать для некоторых людей. Часто является самым легким поместить установку языка в URL (например, http ​://www.example.com/en/site по сравнению с http ​://www.example.com/de/site) и позволить пользователю нажать на ссылки между двумя. Иногда Вы действительно хотите единственный URL для обеих языковых версий, в этом случае необходимо сохранить установку в cookie, но это может перепутать агенты пользователя без поддержки cookie и поисковых систем.

174
ответ дан ashleedawg 23 November 2019 в 20:31
поделиться

Эта статья предлагает следующие свойства объекта навигатора браузера:

  • navigator.language (Netscape - Локализация Браузера)
  • navigator.browserLanguage (Определенный для IE - Браузер Локализованный Язык)
  • navigator.systemLanguage (Определенный для IE - Windows OS - Локализованный Язык)
  • navigator.userLanguage

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

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

Править: Я был бы предложение cookie второго Ivan, но удостоверьтесь, что пользователь может всегда изменить язык позже; не все предпочитают язык их значения по умолчанию браузера.

40
ответ дан Martyn Davis 23 November 2019 в 20:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: