Sponsor Link
ローカライゼーション
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 というイメージリソースを作り、登録しました。
日本語対応用として、AppImage_JP.jpg も別途用意しています。
英語バージョンは、以下のような画面となります。
プロジェクトのローカライズ設定
SwiftUI を使う時も同様に設定が必要です。
プロジェクトのローカライズ対応言語設定
Xcode 上で、プロジェクトからプロジェクト設定中の Localization を “+” ボタンを押して、(数多く表示される言語から) “Japanese” を選択して追加します。
これで、プロジェクトのローカライズ設定は終わりです。
以降、ローカライズしたい対象の要素についてローカライズ設定を行なっていきます。
テキストのローカライズ
基本的には、UIKit を使っていた時と同じです。
ただし、SwiftUI では、文字列指定されたテキストは、デフォルトで、ローカライズのキーとして扱われます。ですので、特別な設定をせずとも、ローカライズ対象になっています。
Localizable.strings ファイルの作成
Localizable.strings を作成します。 Xcode の新規ファイルから、Strings ファイルを選択し、ファイル名を Localizable.strings にして、保存します。
その後、Xcode の Project Navigator 上で Localizable.strings を選択してから、File Inspector 上で、”Localize…” ボタンを押します。次に表示されるダイアログは、現在のファイルをどの言語対応とするかの選択です。 English を選んで “Localize” ボタンを押します。
押した後は、File Inspector 上に Localization というボックスが表示され、English と Japanese が表示されていることが確認できます。Japanese にチェックを入れてください。
Localization ボタンを押す前に、ローカライズが必要なテキストを Localizable.strings に定義しておくと Japanese 向けの Localizable.strings もそのファイルをベースに作成してくれるので便利です。
テキストのローカライズ
Localizable.strings ファイルで、テキストのローカライズを定義していきます。
1つのテキストごとに、以下のようにローカライズされたテキストを定義していきます。
"Hello" = "こんにちわ";
このように定義されていると、日本語設定の OS では、Hello が こんにちわ になります。
Swift に慣れていると、行末の ; を忘れがちですが、忘れると動きません。
次に、イメージファイルのローカライズをしていきます。
イメージのローカライズ
イメージは、Image(named:”リソース名”) という形で読み込まれていますので、該当するリソースをローカライズしていくことになります。
リソースのローカライズ用リソース作成
Assets.xcassets でローカライズしたいリソースを選択し、Attributes Inspector を開くと、Localization を見つけることができます。(Localization.strings とは、異なる Inspector にあります)
Localizae… ボタンを押すと、English, Japanese が選択できるようになりますので、Japanese を選択します。
日本語用リソースが作成されたのが分かりますので、該当箇所に、日本語用に用意したリソースを貼り付けます。
動かしてみる
ここで、念の為、英語設定で動作するかをみてください。(動くはずですが、どこかで動かなくなっているかもしれませんので、こういうチェックが大事だったりします。)
シミュレータを日本語設定にする
シミュレータの設定アプリで日本語にしても良いですが、Xcode 上で、テストに使用するシミュレータの設定を変更することができます。
Scheme をコピー
まずは、現在の Scheme をコピーします。(現在の Scheme は英語設定でテストするときに使用できるように残します)
Scheme のプルダウンから、Edit Scheme… を選択します。
表示されたダイアログで、Duplicate Scheme を押下し、Scheme 名を設定します。(ここでは、Japanese としています)
その後、Run を選択し、Options タブ中の App Language を Japanese に設定します。その後、Close を押して閉じます。
設定は以上です。
日本語設定で動かす
Scheme として先ほど作成した Japanese を選択して実行することで日本語環境での動作となります。
ローカライズしたアプリのスナップショットです。
まとめ
- プロジェクトにローカライズ対象言語を設定する(以前と同じ)
- テキストは、Localizable.strings ファイルに定義する(以前と同じ)
- リソースは、リソースをローカライズ対象にして、設定する(SwiftUI から参照するリソースはこの方法でローカライズ可能)
説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。
Sponsor Link