地図をローカライズする

Map のロケール環境を変更することで、地図で使用される言語と地域の設定をカスタマイズできます。これにより、指定した言語と国または地域に基づいて、地図のラベルと動作が変更される可能性があります。

Maps 3D SDK for iOS の対応状況については、地図の対応状況の表をご覧ください。

言語のローカライズ

デフォルトでは、Maps 3D SDK for iOS は、ユーザーのデバイスに設定されているシステム ロケール(Locale.current)を使用して、表示する地図の翻訳を決定します。このデフォルトの動作をオーバーライドするには、SwiftUI の .environment(\.locale, ...) 修飾子を Map ビューに適用するか、バインドされた Locale 状態変数を実行時に動的に更新します。

言語を設定すると、行政上の特徴、記述子、自然の特徴の翻訳に影響します(「Geneva」を「Genève」に変更したり、「lake」を「lac」に変更したりするなど)。また、右から左に記述する言語では、テキストのレンダリング方向も変わります。

Maps 3D SDK for iOS は、次の順序でローカライズ設定を検索します。

  1. SwiftUI 環境: Map の .environment(\.locale, ...) に渡される Locale 値。
  2. デバイスの設定: iOS デバイスで設定されているシステムのデフォルトの言語 / 地域。

次の例では、中国語("zh")で Map を表示し、リージョンを中国("CN")に設定しています。

import GoogleMaps3D
import SwiftUI

struct ContentView: View {
  var body: some View {
    Map(mode: .hybrid)
      .environment(\.locale, Locale(identifier: "zh-CN"))
  }
}

環境の言語 / 地域を @State プロパティにバインドすることで、実行時に言語と地域を動的に更新することもできます。

import GoogleMaps3D
import SwiftUI

struct LocalizationExampleView: View {
  @State private var mapLocale: Locale = .current

  var body: some View {
    VStack {
      Map(mode: .hybrid)
        .environment(\.locale, mapLocale)

      HStack {
        Button("Français") {
          mapLocale = Locale(identifier: "fr-FR")
        }
        Button("日本語") {
          mapLocale = Locale(identifier: "ja-JP")
        }
        Button("中文") {
          mapLocale = Locale(identifier: "zh-CN")
        }
      }
    }
  }
}

リージョンのローカライズ

Map で .environment(\.locale, ...) に渡される Locale にリージョンを設定すると、異なる地図タイルを配信したり、地域に適した結果を優先して表示したりできます。地域を設定すると、アプリが配布される国または地域に合わせたローカライズが適用されるようになります。

特定の地域コード("JP" など)を設定しながらユーザーのデバイスの言語を維持するには、Locale.Components を使用して Locale を作成します。

var components = Locale.Components(locale: Locale.current)
components.region = Locale.Region("JP")
let regionBiasedLocale = Locale(components: components)