Skip to main content

マップの表示を日本語にする

やりたいこと

  • 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"]]