[SwiftUI] SwiftUI での Localization 方法

SwiftUI

     

TAGS:

⌛️ 3 min.
SwiftUI での Localization の方法を説明します。

ローカライゼーション

Storyboard を使用している時は、Storyboard ごとローカライズしたり、その中で使用される文字列をコードでローカライズしたりできました。

SwiftUI ではどうなのか確認してみます。

Storyboard を対象外とするので、イメージとテキストの扱いについて確認します。

以下では、英語をベース言語として、日本語対応分を追加する方法を説明します。

ローカライズされていないプロジェクト

以下のように、イメージとテキストを表示するアプリをローカライズしていきます。

アプリケーションコード


//
//  ContentView.swift
//
//  Created by : Tomoaki Yagishita on 2020/10/21
//  © 2020  SmallDeskSoftware
//

import SwiftUI

struct ContentView: View {
    var body: some View {
      ZStack {
        Image("AppImage")
          .resizable()
          .scaledToFit()
        VStack {
          Spacer()
          Text("Hello")
            .padding()
        }
      }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

リソースとしては、AppImage_EN.jpg を用意して、Assets.xcassets の中に、AppImage というイメージリソースを作り、登録しました。

Resource setup

「Resource setup」

日本語対応用として、AppImage_JP.jpg も別途用意しています。

英語バージョンは、以下のような画面となります。

App image (english)

「App image (english)」

プロジェクトのローカライズ設定

SwiftUI を使う時も同様に設定が必要です。

プロジェクトのローカライズ対応言語設定

Xcode 上で、プロジェクトからプロジェクト設定中の Localization を “+” ボタンを押して、(数多く表示される言語から) “Japanese” を選択して追加します。

Project setting for Localization

「Project setting for Localization」

これで、プロジェクトのローカライズ設定は終わりです。

以降、ローカライズしたい対象の要素についてローカライズ設定を行なっていきます。

テキストのローカライズ

基本的には、UIKit を使っていた時と同じです。

ただし、SwiftUI では、文字列指定されたテキストは、デフォルトで、ローカライズのキーとして扱われます。ですので、特別な設定をせずとも、ローカライズ対象になっています。

Localizable.strings ファイルの作成

Localizable.strings を作成します。 Xcode の新規ファイルから、Strings ファイルを選択し、ファイル名を Localizable.strings にして、保存します。

その後、Xcode の Project Navigator 上で Localizable.strings を選択してから、File Inspector 上で、”Localize…” ボタンを押します。次に表示されるダイアログは、現在のファイルをどの言語対応とするかの選択です。 English を選んで “Localize” ボタンを押します。

setup String localization

「setup String localization」

押した後は、File Inspector 上に Localization というボックスが表示され、English と Japanese が表示されていることが確認できます。Japanese にチェックを入れてください。

MEMO

Localization ボタンを押す前に、ローカライズが必要なテキストを Localizable.strings に定義しておくと Japanese 向けの Localizable.strings もそのファイルをベースに作成してくれるので便利です。

Check Japanese Localization

「Check Japanese Localization」

テキストのローカライズ

Localizable.strings ファイルで、テキストのローカライズを定義していきます。
1つのテキストごとに、以下のようにローカライズされたテキストを定義していきます。

Localizable.strings の例


"Hello" = "こんにちわ";

このように定義されていると、日本語設定の OS では、Hello が こんにちわ になります。

行末の ; に注意

Swift に慣れていると、行末の ; を忘れがちですが、忘れると動きません。

次に、イメージファイルのローカライズをしていきます。

イメージのローカライズ

イメージは、Image(named:”リソース名”) という形で読み込まれていますので、該当するリソースをローカライズしていくことになります。

リソースのローカライズ用リソース作成

Assets.xcassets でローカライズしたいリソースを選択し、Attributes Inspector を開くと、Localization を見つけることができます。(Localization.strings とは、異なる Inspector にあります)

Localize asset

「Localize asset」

Localizae… ボタンを押すと、English, Japanese が選択できるようになりますので、Japanese を選択します。

setup resource for Japanese

「setup resource for Japanese」

日本語用リソースが作成されたのが分かりますので、該当箇所に、日本語用に用意したリソースを貼り付けます。

動かしてみる

ここで、念の為、英語設定で動作するかをみてください。(動くはずですが、どこかで動かなくなっているかもしれませんので、こういうチェックが大事だったりします。)

シミュレータを日本語設定にする

シミュレータの設定アプリで日本語にしても良いですが、Xcode 上で、テストに使用するシミュレータの設定を変更することができます。

Scheme をコピー

まずは、現在の Scheme をコピーします。(現在の Scheme は英語設定でテストするときに使用できるように残します)
Scheme のプルダウンから、Edit Scheme… を選択します。

select edit for copying scheme

「select edit for copying scheme」

表示されたダイアログで、Duplicate Scheme を押下し、Scheme 名を設定します。(ここでは、Japanese としています)

Duplicate Scheme for Japanese setting

「Duplicate Scheme for Japanese setting」

その後、Run を選択し、Options タブ中の App Language を Japanese に設定します。その後、Close を押して閉じます。

Select Japanese for App Language

「Select Japanese for App Language」

設定は以上です。

日本語設定で動かす

Scheme として先ほど作成した Japanese を選択して実行することで日本語環境での動作となります。

execute app with Japanese setting

「execute app with Japanese setting」

ローカライズしたアプリのスナップショットです。

ローカライズしたアプリスナップショット

「App image (Japanese)」
イメージ、テキスト 共に、日本語化されていることが分かります。

まとめ

SwiftUI でのローカライズ
  • プロジェクトにローカライズ対象言語を設定する(以前と同じ)
  • テキストは、Localizable.strings ファイルに定義する(以前と同じ)
  • リソースは、リソースをローカライズ対象にして、設定する(SwiftUI から参照するリソースはこの方法でローカライズ可能)

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です