42
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iOSアプリのローカライズとローカリゼーションのデバッグ - 開発言語の変更、ストーリーボードと文字列のローカライズ、ローカライズされていない文字列の特定とデバッグ

Last updated at Posted at 2020-05-24

ローカリゼーションとは?

自分が作ったアプリが人気になり、英語など他の言語にそのアプリを翻訳してもっと多くの人が使えるようにしたいと思うときが来るかもしれません。iOSのシステムは、ユーザー設定に基づきコンテンツを適切な言語で表示するなど、大方のローカリゼーションを行ってくれます。

アプリをローカライズする方法

Xcode 13では、ローカライゼーションをより簡単に行う方法があります。

Development language の変更

開発言語とは、アプリの開発時に使用する言語のことを指します。まず、設定の内容を確認する必要があります:

プロジェクトファイルをクリックし、(ターゲットではなく)プロジェクトファイルを選択します。ローカリゼーションのセクションで、Development Language が日本語なのか英語なのかを確認します。日本語の場合、設定は正しいので、何もする必要はありません。英語の場合、引き続き開発言語の変更のガイドに従ってください。

スクリーンショット 2020-05-24 16.05.37.png
次に Xcode を閉じ、.xcodeproj ファイルを右クリックして選択し、このファイルの内容を表示する:
スクリーンショット 2020-05-24 16.08.33.png
project.pbxproj ファイルを見つけ、テキストエディターで開く。
スクリーンショット 2020-05-24 16.09.42.png
developmentRegion を検索し、ja に変更する。
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;

上記のコードを以下に変更する

compatibilityVersion = "Xcode 9.3";
developmentRegion = ja;
hasScannedForEncodings = 0;
knownRegions を検索する
knownRegions = (
		en,
		Base,
		);

上記のコードを以下に変更する

knownRegions = (
		ja,
		en,
		Base,
		);
ファイルを保存して、再度 Xcode を開く:

Development Language が日本語に変更されているのをご確認いただけます

スクリーンショット 2020-05-24 16.13.36.png

新しい言語の追加

  1. ファイルナビゲーター内のプロジェクトファイルをクリックします
  2. プロジェクトファイルをクリックします
  3. 情報タブを開いていることを確認してください
  4. Localizations セクションのプラスボタンをクリックしてください
  5. 追加したい言語を選択してください
スクリーンショット 2020-05-24 16.15.42.png

また、必ずスイッチ Use Base Internationalization を有効にしてください

スクリーンショット 2020-05-24 16.53.57.png

ストーリーボードのローカリゼーション

初期設定

ローカリゼーションを最初にセットアップするとき、Xcodeはあなたのためにすべての文字列を抽出してそれらをファイルに入れる作業を行います。ストーリーボードのローカリゼーションをセットアップするには:

  1. Storyboard ファイルを選択します。
  2. 右側のパネルで、Localizations セクションを探し、追加したい言語のオプションをオンにします。
スクリーンショット 2020-05-24 16.18.53.png

これで、左側のファイルナビゲーターで、Storyboard ファイルを展開し、翻訳ファイルを確認できます:

スクリーンショット 2020-05-24 16.20.10.png

Main.strings (English) をクリックすると、原文と翻訳文のペアが表示されます:

/* Class = "UILabel"; text = "こんにちは"; ObjectID = "ok2-tj-BN9"; */
"ok2-tj-BN9.text" = "こんにちは";

さて、ok2-tj-BN9 は、Storyboard 上にあるUILabel の要素IDです。ストーリーボードインターフェースに戻り、そのラベルを選択すると、その要素IDが表示されます:

スクリーンショット 2020-05-24 16.22.14.png

また、.text はその UILabel のテキストプロパティを示しているにすぎません。

さぁ、これで翻訳済みのストリングを Main.strings (English) に入れられるようになりました:

/* Class = "UILabel"; text = "こんにちは"; ObjectID = "ok2-tj-BN9"; */
"ok2-tj-BN9.text" = "Hello";

トランスレーションの追加

さらにトランスレーションを追加したい場合。 UIStoryboard でエレメントのオブジェクトIDを見つけ、それを Main.strings (English) ファイルに追加する。

エレメントが異なる場合、プロパティは同じではない:

//9rM-vm-U1g is an UITextField. Placeholder means placeholder.
"9rM-vm-U1g.placeholder" = "ユーザー名";

//GsY-2N-hIy is an UIButton, normalTitle means the title of the button at normal.
"GsY-2N-hIy.normalTitle" = "ボタン";

//BYZ-38-t0r is an UIViewController
"BYZ-38-t0r.title" = "登録画面";

文字列のローカライズ

文字列ファイルを作成する

command-Nを押し、Strings file を作成する

スクリーンショット 2020-05-24 16.33.11.png

ファイル Localizable.strings に名前を付ける

Xcodeでそのファイルを選択し、右側のローカライズボタンを選択する。ポップアップで英語を選択する。次に、右側のパネルで、すべての言語を選択する。

スクリーンショット 2020-05-24 16.35.48.png

全ての文字列を NSLocalizedString に入れて下さい

この例では、元のコードは以下です:

@IBAction func actionPress(){
    let alert = UIAlertController(title: "こんにちは", message: nil, preferredStyle: .alert)
    let actionClose = UIAlertAction(title: "はい", style: .cancel, handler: nil)
    alert.addAction(actionClose)
    present(alert, animated: true, completion: nil)
}
@IBAction func actionPress(){
    let alert = UIAlertController(title: NSLocalizedString("こんにちは", comment: ""), message: nil, preferredStyle: .alert)
    let actionClose = UIAlertAction(title: NSLocalizedString("はい", comment: ""), style: .cancel, handler: nil)
    alert.addAction(actionClose)
    present(alert, animated: true, completion: nil)
}

コードファイルから文字列を抽出する

  1. Terminal を開く
  2. cd コマンドで .lproj ファイルがある場所に移動し、以下のコマンドを実行する
find . -name \*.swift | xargs genstrings -o en.lproj
find . -name \*.swift | xargs genstrings -o ja.lproj

en.lproj ファイルを開く:

ご覧の通り、すでにプログラムの文字列が含まれています:

/* No comment provided by engineer. */
"こんにちは" = "こんにちは";

/* No comment provided by engineer. */
"はい" = "はい";

これで、英語の訳を追加することができます:

/* No comment provided by engineer. */
"こんにちは" = "Hello";

/* No comment provided by engineer. */
"はい" = "Yes";

ローカリゼーションのデバッグ

シミュレーターの言語を変更する

シミュレーターの言語を変更するには、Edit Schemeをクリックします。

スクリーンショット 2020-05-24 16.45.10.png

Options タブを選択すると、Application Language を編集できるようになります。

スクリーンショット 2020-05-24 16.45.54.png

プログラムを英語で実行すると次のようになります:

スクリーンショット 2020-05-24 16.45.10.png

ローカライズされていない文字列の確認方法:

再度、設定 Edit Scheme のタブ Options を開き、Show non-localized strings をオンに切り替える。

スクリーンショット 2020-05-24 16.49.09.png

この状態でプログラムをテストする。ローカライズされていない文字列があれば、コンソールにエラーが表示される:

スクリーンショット 2020-05-24 16.57.13.png

Like this message:

localization[3921:116986] [strings] ERROR: pBD-R7-cpO.text not found in table Main of bundle CFBundle 0x7fdab8704210

実際のデバイスでアプリケーションの言語を変更する:

実際のデバイスでアプリケーションをテストしてから、アプリケーションの言語を切り替える必要がある。そのためには:

  1. システム設定を開く

  2. アプリの名前を見つけ、アプリの設定を開く

  3. 言語オプションをクリックする

  4. 言語を切り替える

  5. これで、自分のアプリをテストすることが可能となります。


:relaxed: Twitter @MszPro

:sunny: 私の公開されているQiita記事のリストをカテゴリー別にご覧いただけます。

42
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?