Как получить единицы измерения языка браузера

71
5

У меня есть значение в км, и я хочу преобразовать его в конкретную единицу измерения местоположения в браузере (км или мили).

Я использую google maps API v3 directionsService, в частности последний пример на этой странице.

function computeTotalDistance(result) {
var total = 0;
var myroute = result.routes[0];
for (i = 0; i < myroute.legs.length; i++) {
total += myroute.legs[i].distance.value;
}
total = total / 1000.
document.getElementById("total").innerHTML = total + " km";
}

Как я могу определить единицу измерения языка браузера, чтобы я мог выполнить преобразование, если это необходимо?

спросил(а) 2013-09-08T15:53:00+04:00 7 лет, 2 месяца назад
1
Решение
73

Я думаю, самый простой способ - проверить window.navigator.language и проверить, выбрал ли пользователь "en-US" или "my", так как большинство стран вводит метрическую систему (см. Эту карту). Вы также можете использовать GeoIP, но в целом вы должны предоставить пользователю возможность изменить систему, если он предпочитает другую.

Сам браузер не сохраняет предпочтения единиц измерения.

ответил(а) 2013-09-08T16:06:00+04:00 7 лет, 2 месяца назад
72

Поскольку API-интерфейс карт по умолчанию относится к UnitSystem единичной системы страны происхождения, я собираюсь использовать следующее, если у кого-то нет лучшего решения:

var metric = myroute.legs[0].distance.text.indexOf(" km") != -1?true:false;

Я знаю, что это не особенно элегантно, но кажется надежным, и он не требует каких-либо данных, которые у меня еще нет в моем распоряжении.

Я попытался найти способ получить фактическую UnitSystem, чтобы использовать службы services, но безуспешно.

Из документации API:

Единичные системы

По умолчанию направления рассчитываются и отображаются с использованием единичной системы страны происхождения или региона. (Примечание: происхождение, выраженное с использованием координат широты/долготы, а не адресов, по умолчанию всегда соответствует метрическим единицам.) Например, маршрут от "Чикаго, Иллинойс" до "Торонто, ОНТ" отобразит результаты в милях, в то время как обратный маршрут отобразит результаты в километрах. Вы можете переопределить эту систему устройств, указав ее явно в запросе, используя одно из следующих значений UnitSystem:

UnitSystem.METRIC указывает использование метрической системы. Расстояния показаны с использованием километров. UnitSystem.IMPERIAL указывает использование имперской (английской) системы. Расстояния показаны с помощью миль. Примечание: этот системный параметр системы влияет только на текст, отображаемый пользователю. Результат направления также содержит значения расстояния, не показанные пользователю, которые всегда выражаются в метрах.

ответил(а) 2013-09-08T21:38:00+04:00 7 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема