MKMapViewの基礎となる言語をシステムロケールとは異なる言語に切り替えることは可能ですか?
たとえば、住所に翻訳された通りの名前(英語)が表示されているが、母国語の翻訳を確認する必要がある場合(たとえば、中国本土または日本)。
これに代わる方法は、ローカルのマップエンジン(Baiduなど)を含めることですが、iOSがそれをすぐに実行できるかどうかを確認したいと思います。
地図は表示されている国の言語で表示され、多くの場合、第二言語として英語(またはおそらくあなたの現地の言語)が使用されます。携帯電話でマップアプリを開き、たとえばドバイやエジプトのカイロと入力すると、都市や通りのアラビア語のテキストが表示されます。
同じことが他の言語にも当てはまります。「上海、中国」と入力すると、中国語のテキスト、東京、日本が表示され、日本語のテキストなどが表示されます。
(現在のところ)入力の言語を手動で変更するためのオープンフレームワーク関数はありません。openstreetmap APIにはこれに対するいくつかの呼び出しがあることを私は知っていますが、それはあなた自身のマップハンドラーをローリングする必要があるでしょう。
これに使用googlesdk
します。私はそれをします、それはローカルの場所に応じてあまりにも便利ですマップはローカル言語に変換されますそしてあなたが注釈と複数の注釈について心配するならあなたはちょうどそれらすべてのものを実装することができますMKMapview
マップアプリケーションには、システム言語ではなくローカル言語でラベルを表示するオプションがありますが、このオプションはMapKitでは使用できません。
Mapbox Maps SDK for iOSには、ラベルを各地域のローカル言語、またはグローバルに9つの言語のいずれかにローカライズするオプションがあります(OpenStreetMapおよびWikidataに基づく)。
マップ上のすべてのラベルをシステム言語に変更するには、MGLMapViewDelegate
オブジェクトにメソッドを実装させてから、-mapView:didFinishLoadingStyle:
メソッドを呼び出します-[MGLStyle localizeLabelsIntoLocale:]
。
Swiftの場合:
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がその言語をサポートしていることを確認してください。