地图上的某些地方标有西里尔文名称,但我只需要地图上地点的英文/拉丁文名称,但有时只有当地名称。我该如何实施?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