マップの表示を日本語にする
やりたいこと
- Mapbox の地図で日本語表記を使いたい
- ただし、iOS の Locale で日本語設定していない人はデフォルトの英語にしたい
背景
- Mapbox のデフォルトのマップ (
standard
) だと、アルファベット表記のみ対応 - また、iOS の Locale によって自動で切り替わったりもしない(ので明示的に指定する必要がある)
方法
- ★1. Mapbox から提供されている、多言語対応の
streets-v12
を使用する - ★2. iOS の Locale 設定を見て、日本語なら Mapbox も日本語表記にする
swift
let mapStyle = MapStyle(uri: StyleURI(rawValue: "mapbox://styles/mapbox/streets-v12")!) // ★1
MapboxMaps.MapReader { mapReader in
Map(initialViewport: camera) {
...
}
.mapStyle(mapStyle)
.onStyleLoaded { style in
if Locale.preferredLanguages.first?.hasPrefix("ja") == true {
try? mapReader.map?.localizeLabels(into: Locale(identifier: "ja")) // ★2
}
}
}
余談: 自前の Style に設定したい場合
以下のような設定をすることで、多言語対応できるそうで、もし対応する場合はそうしよう。
(いま公開予定のピンは 1万件以上あるので、対応する気は当面ない)
json
["coalesce", ["get", "name_ja"], ["get", "name"]]