是否可以将 MKMapView 的基础语言切换到与系统语言环境不同的语言?
例如,如果地址显示翻译后的街道名称(英文),但我需要查看母语翻译(例如在中国大陆或日本)。
一个替代方案是包含一个本地地图引擎(如百度),但我希望看看 iOS 是否可以开箱即用。
地图将以它所显示的国家/地区的语言显示,通常以英语(或者您的当地语言)作为第二语言。例如,在您的手机上打开地图应用程序并输入迪拜或埃及开罗,您将看到城市和街道的阿拉伯语文本。
其他语言也是如此。输入上海,中国,你会得到中文文本,东京,日本,你会得到日语文本,等等。
(截至目前)没有开放的框架功能可以手动更改输入的语言。我知道 openstreetmap API 对此有一些调用,但这需要滚动您自己的地图处理程序。
用于googlesdk
此。我这样做了,根据本地位置,它太有用了,地图将转换为本地语言,如果您担心注释和多个注释,您可以实现所有这些事情,就像MKMapview
Maps 应用程序有一个以本地语言而不是系统语言显示标签的选项,但此选项不适用于 MapKit。
iOS 版 Mapbox Maps SDK确实有一个选项,可以将标签本地化为每个区域的本地语言或全球九种语言之一(基于 OpenStreetMap 和 Wikidata)。
要将地图上的所有标签更改为系统语言,请让您的MGLMapViewDelegate
对象实现该-mapView:didFinishLoadingStyle:
方法,然后调用该-[MGLStyle localizeLabelsIntoLocale:]
方法。
在斯威夫特:
func mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle) {
// Into the system language
style.localizeLabels(into: nil)
// Into Simplified Chinese
style.localizeLabels(into: Locale(identifier: "zh-Hans"))
// Into the local language where a given feature is located
style.localizeLabels(into: Locale(identifier: "mul"))
}
或者在 Objective-C 中:
- (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style {
// Into the system language
[style localizeLabelsIntoLocale:nil];
// Into Simplified Chinese
[style localizeLabelsIntoLocale:[NSLocale localeWithLocaleIdentifier:@"zh-Hans"]];
// Into the local language where a given feature is located
[style localizeLabelsIntoLocale:[NSLocale localeWithLocaleIdentifier:@"mul"]];
}
还有一些用于本地化某些类型特征的选项,例如仅街道或仅地标。有关详细信息,请参阅此文档。
通过强制应用默认语言可以克服这个限制。虽然价格昂贵,但它确实有回报。
let langCultureCode: String = "en" let defaults = UserDefaults.standard defaults.set([langCultureCode], forKey: "AppleLanguages") defaults.synchronize() // UserDefaults.standard.set(["AR"], forKey: "AppleLanguages") // case Arabic
在我的应用程序中,使用基于阿拉伯语的设备的用户错误地使用他们的阿拉伯语国家和城市名称从我的数据库中搜索。
regionDidChangeAnimated?
// الرياض, السعودية
// دبي ، الإمارات
// القاهرة، مصر
强行忽略设备默认语言并不是随便来的。恢复我的 Mapview 功能,使我的应用放弃任何本地化字符串。而且有很多。
regionDidChangeAnimated?
// Riyadh, Saudi Arabia
// Dubai , United Arab Emirates
// Cairo , Egypt
只需style.localizeLabels(into: Locale.current)
在您的mapView(_ mapView: MGLMapView, didFinishLoading style: MGLStyle)
功能中执行即可。
确保您的应用程序已在项目设置中启用该特定语言并且 MapBox 支持该语言。