Локализация результатов — это механизм адаптации ответов геосервисов под язык, региональные стандарты и культурные особенности конкретной страны или пользователя. В HERE Maps API локализация влияет на отображение:
Правильно настроенная локализация позволяет получать результаты на нужном языке даже при работе с международными адресами и объектами.
langБольшинство сервисов HERE поддерживают параметр lang,
определяющий язык ответа.
Пример запроса к Geocoding & Search API:
const url =
'https://geocode.search.hereapi.com/v1/geocode' +
'?q=Paris' +
'&lang=ru' +
'&apiKey=YOUR_API_KEY';
fetch(url)
.then(response => response.json())
.then(data => {
console.log(data);
});
В результате:
Например:
{
"countryName": "Франция",
"state": "Иль-де-Франс",
"city": "Париж"
}
Без параметра локализации сервис может вернуть:
{
"countryName": "France",
"state": "Île-de-France",
"city": "Paris"
}
HERE Maps API использует стандартные языковые идентификаторы ISO.
Наиболее распространённые варианты:
| Код | Язык |
|---|---|
| ru | Русский |
| en | Английский |
| de | Немецкий |
| fr | Французский |
| es | Испанский |
| it | Итальянский |
| pt | Португальский |
| ja | Японский |
| ko | Корейский |
| zh | Китайский |
Пример:
const language = 'de';
const url =
`https://discover.search.hereapi.com/v1/discover?q=restaurant` +
`&at=52.5200,13.4050` +
`&lang=${language}` +
`&apiKey=YOUR_API_KEY`;
Сервис Discover Search позволяет получать объекты на выбранном языке.
Пример поиска музеев:
async function searchMuseums() {
const response = await fetch(
'https://discover.search.hereapi.com/v1/discover' +
'?q=museum' +
'&at=48.8566,2.3522' +
'&lang=ru' +
'&apiKey=YOUR_API_KEY'
);
const result = await response.json();
console.log(result.items);
}
searchMuseums();
Если локализованное название существует в базе HERE, оно будет возвращено автоматически:
{
"title": "Лувр"
}
В противном случае используется оригинальное название:
{
"title": "Louvre Museum"
}
Reverse Geocoding преобразует координаты в адрес.
Пример:
const latitude = 51.5074;
const longitude = -0.1278;
const url =
`https://revgeocode.search.hereapi.com/v1/revgeocode` +
`?at=${latitude},${longitude}` +
`&lang=ru` +
`&apiKey=YOUR_API_KEY`;
fetch(url)
.then(response => response.json())
.then(data => {
console.log(data.items[0]);
});
Результат может содержать:
{
"city": "Лондон",
"countryName": "Великобритания"
}
Для английской локали:
{
"city": "London",
"countryName": "United Kingdom"
}
Autocomplete API также поддерживает языковые настройки.
Пример:
async function autocomplete(query) {
const response = await fetch(
`https://autocomplete.search.hereapi.com/v1/autocomplete` +
`?q=${encodeURIComponent(query)}` +
`&lang=ru` +
`&apiKey=YOUR_API_KEY`
);
return response.json();
}
Поиск:
autocomplete('мос');
Может вернуть:
[
{
"title": "Москва"
}
]
Для английской локали:
[
{
"title": "Moscow"
}
]
Routing API поддерживает локализованные инструкции движения.
Пример:
const url =
'https://router.hereapi.com/v8/routes' +
'?transportMode=car' +
'&origin=55.7558,37.6173' +
'&destination=55.7512,37.6184' +
'&return=summary,actions' +
'&lang=ru' +
'&apiKey=YOUR_API_KEY';
Фрагмент ответа:
{
"instruction": "Поверните направо на Тверскую улицу"
}
При использовании английского языка:
{
"instruction": "Turn right onto Tverskaya Street"
}
Это особенно важно для навигационных приложений и голосовых помощников.
Распространённый подход — определение языка пользователя через браузер.
const browserLanguage = navigator.language;
console.log(browserLanguage);
Примеры значений:
ru-RU
en-US
de-DE
fr-FR
Получение базового языка:
const language =
navigator.language.split('-')[0];
console.log(language);
Результат:
ru
Использование:
const url =
`https://geocode.search.hereapi.com/v1/geocode` +
`?q=Berlin` +
`&lang=${language}` +
`&apiKey=YOUR_API_KEY`;
В многоязычных приложениях язык может переключаться динамически.
Пример:
let currentLanguage = 'ru';
function setLanguage(lang) {
currentLanguage = lang;
}
Использование:
setLanguage('en');
Запросы автоматически используют выбранную локаль:
async function search(query) {
const response = await fetch(
`https://discover.search.hereapi.com/v1/discover` +
`?q=${encodeURIComponent(query)}` +
`&at=55.7558,37.6173` +
`&lang=${currentLanguage}` +
`&apiKey=YOUR_API_KEY`
);
return response.json();
}
Сам объект карты отображает географические данные независимо от языка интерфейса приложения.
Для локализации элементов управления используется параметр языка при создании платформы.
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY',
language: 'ru'
});
Создание стандартных элементов управления:
const ui = H.ui.UI.createDefault(
map,
defaultLayers,
'ru-RU'
);
Теперь кнопки управления будут отображаться на русском языке.
Язык и регион — разные понятия.
Например:
en-US
en-GB
fr-FR
fr-CA
pt-BR
pt-PT
Одинаковый язык может иметь различные:
Пример:
const locale = 'en-GB';
const ui = H.ui.UI.createDefault(
map,
defaultLayers,
locale
);
Многие объекты HERE содержат несколько вариантов названий.
Например:
{
"title": "Москва",
"address": {
"city": "Москва"
}
}
или:
{
"title": "Moscow",
"address": {
"city": "Moscow"
}
}
Выбор конкретного варианта происходит автоматически на основании параметра локализации.
Часто язык сохраняется между сессиями.
Пример через Local Storage:
function saveLanguage(lang) {
localStorage.setItem('language', lang);
}
Чтение:
function loadLanguage() {
return localStorage.getItem('language') || 'en';
}
Использование:
const currentLanguage = loadLanguage();
Изменение:
saveLanguage('ru');
Поиск ближайших объектов:
async function searchNearby() {
const response = await fetch(
'https://discover.search.hereapi.com/v1/discover' +
'?q=hotel' +
'&at=41.9028,12.4964' +
'&lang=it' +
'&apiKey=YOUR_API_KEY'
);
return response.json();
}
Ответ будет содержать:
{
"title": "Hotel Roma"
}
а адресные данные будут возвращены на итальянском языке.
Не все объекты имеют локализованные версии.
Практикой считается организация запасного языка.
const preferredLanguage = 'kk';
const fallbackLanguage = 'en';
Функция получения данных:
async function fetchLocalized(url) {
try {
const response = await fetch(
`${url}&lang=${preferredLanguage}`
);
return await response.json();
}
catch {
const response = await fetch(
`${url}&lang=${fallbackLanguage}`
);
return await response.json();
}
}
Подобная схема обеспечивает стабильную работу даже при отсутствии локализованных записей.
При работе с международными адресами необходимо учитывать несколько особенностей:
Например:
{
"street": "Champs-Élysées",
"city": "Париж",
"countryName": "Франция"
}
Город и страна локализованы, а название улицы осталось в оригинальном виде.
Использовать язык пользователя по умолчанию
const lang =
navigator.language.split('-')[0];
Сохранять выбранную локаль
localStorage.setItem('language', lang);
Передавать параметр lang во все поисковые
запросы
&lang=ru
Локализовать инструкции маршрутов
&lang=ru
Использовать региональные идентификаторы для интерфейса
ru-RU
en-US
de-DE
Предусматривать резервный язык
en
Не рассчитывать на перевод собственных названий объектов
Многие компании, гостиницы, рестораны и достопримечательности сохраняют оригинальное написание независимо от выбранной локали, что является нормальным поведением сервисов HERE Maps API.