Как включить латинские названия мест в некоторых местах вместо локальных в Carto Services?

Некоторые места на карте помечены кириллическими названиями, но мне нужны только английские / латинские названия мест на карте, однако иногда встречаются только местные названия. Как я могу это реализовать? PS: я заметил этот вопрос на белорусском и частично на русском языках.

Скриншот

1 ответ

Решение

О языках в целом: в конце концов, это зависит от того, на каких языках помечено конкретное название места. OpenStreetMap всегда имеет "локальный" вариант на местном основном языке, и CARTO Mobile SDK использует его по умолчанию, но данные также имеют другие языки, поэтому вы можете управлять им следующим образом.

CartoVectorTileLayer (и то и другое CartoOnlineVectorTileLayer а также CartoOfflineVectorTileLayer являются его подклассами) имеет метод setLanguage(String) выбрать язык, например:

layer.setLanguage("en");

даст вам карты на английском языке.

В SDK 4.0.2 SDK и источнике плиток nutiteq.osm вы можете использовать следующие языки: local/default, en, es, de, fr, it, ru, zh (китайский), tr (турецкий) и et (эстонский) в качестве языка

С последним CARTO SDK 4.1.0 и новым источником carto.streets вы можете использовать любой язык OSM. Я бы предложил настроить карту на основе языковых настроек устройства, например:

// Android
layer.setLanguage(Locale.getDefault().getLanguage());

// iOs / Xamarin
layer.Language = Foundation.NSLocale.PreferredLanguages[0].Substring(0, 2);

Что, если конкретное имя не доступно на данном языке? Тогда MapView по умолчанию откатится на "местный" язык, карта не будет пустой. Но если "местный" язык все еще не читается, я бы предпочел латинские алфавитные названия? В SDK 4.1.0 вы можете настроить первичные и вторичные резервные языки, например, вы установите для немецкого языка первичный язык "de", а затем, чтобы избежать странных алфавитов (скажем, иврита, греческого, большей части Азии), установите "en" в качестве основного запасного; тогда local используется, только если отсутствуют ваши основное и английское имена:

layer.FallbackLanguage = "en";

Теперь я знаю, что вам нужны автоматически транслитерированные / романизированные имена, поэтому даже если исходные данные из OpenStreetMap имеют, например, имена только на кириллице (Россия, Белоруссия и т. Д.), Они будут отображаться латинскими буквами. Это не совсем то же самое, что перевод, например, Москва станет Москвой с романизацией, но может быть полезна во многих случаях, фактически со всеми нелатинскими шрифтами, особенно из Азии (китайский и т. Д.). Проблема здесь в том, что многие языки, в том числе русский, имеют много конкурирующих правил романизации, поэтому, даже если бы мы захотели, мы не смогли бы сделать это на общем уровне рендеринга карты SDK. Наш CARTO SDK может предоставить API для приложения, чтобы применить вашу предпочитаемую таблицу перевода, но у нас ее пока нет. SDK является открытым исходным кодом, и вы можете предоставить патч для этой функции. Я добавил вопрос для этого проекта: https://github.com/CartoDB/mobile-sdk/issues/147

Другие вопросы по тегам