iOSアプリの多言語対応について

f:id:vasilyjp:20180927112725j:plain

こんにちは。新事業創造部の荒井です。 今回はiOSアプリの多言語対応について紹介します。

はじめに

私は今までいくつかのiOSアプリを運営してきましたが、どのアプリも日本語のみのサポートでした。現在関わっているWEARでは、すでに多言語対応が進められており、良い機会ですので個人的に知見がなかった多言語対応について調査をしました。今回は基本となる文字列の翻訳について触れていきたいと思います。

多言語対応

幅広いユーザーにサービスを使用してもらうには、言語と地域が非常に重要になってきます。日付、通貨、長さの単位など、言語、地域、文化によって異なることが多く、アプリケーションを世界的に出すには地域や文化に対応していく必要があります。現在WEARでは4つの言語対応を進めており、設定言語に応じて、アプリケーションをその言語に翻訳しています。対応している言語は以下の通りです。

  • 日本語
  • 簡体字中国語
  • 繁体字中国語
  • 英語

多言語対応をすることで、日本人以外の方にも使用していただく機会が増え、ユーザー増加が見込めます。

Localizationの手順

それでは設定言語によってアプリケーション内の文字列を複数の言語に変更する方法を紹介します。大まかに以下の流れになります。

  1. PROJECTのLocalizationsに言語の追加をする
  2. Localizable.stringsを用意する
  3. NSLocalizedStringを使用し言語の切り替えをする

1. Localizationに追加

ローカライズの設定は PROJECT -> Info -> Localizations で行います。 はじめにBase Internatioalizationを有効にします。

Base Internationalizationを有効にする

PROJECT -> Info -> Use Base Internationalizationにチェックを付けます。これによりアプリケーションで使う文字列を.storyboardと.xibから分離します。こちらはXcode 5以降ではデフォルトで有効になっています。それ以前のバージョンから作成されているプロジェクトは公式の「Base Internationalizationを有効にする」が参考になるかと思います。

言語を追加する

次にPROJECT -> Info -> Localizationsの「+」を押して言語を追加します。例では英語をBaseにしているので日本語を追加しています。

追加する言語を選ぶと、対応するファイルとFile Typesを選択する画面が表示されます。表示する文字列のみを対応する場合はLocalizable Stringsを選択してください。

2. Localizable.stringsの作成

翻訳したい文字列を定義しておくLocalizable.stringsを作成します。 メニューの Fille -> New -> FileからStrings Fileを選択します。

作成したLocalizable.Stringsを選択し「Localize...」から言語を選択すると選択した言語がローカライズされます。

Baseにチェックをつけることで Localizable.strings(Japanese)Localizable.strings(Base) が作成されます。

作成したLocalizable.stringsを編集していきます。 ここではアプリケーションでよく使う文字列をサンプルとして定義しました。

Localizable.strings(Japanese)

"Yes"     = "はい";
"No"      = "いいえ";
"Cancel"  = "キャンセル";
"Confirm" = "確認";
"Search"  = "検索";
"Else"    = "その他";
"Edit"    = "編集";
"Done"    = "完了";
"Friend"  = "友達";
"Save"    = "保存";
"Title"   = "タイトル";
"Decide"  = "決定";

Localizable.strings(Base)

"Yes"     = "Yes";
"No"      = "No";
"Cancel"  = "Cancel";
"Confirm" = "Confirm";
"Search"  = "Search";
"Else"    = "Other";
"Edit"    = "Edit";
"Done"    = "Done";
"Friend"  = "Friends";
"Save"    = "Save";
"Title"   = "Title";
"Decide"  = "Enter";

3. NSLocalizedString

ここまでで準備は完了です。NSLocalizedStringを使用し言語の切り替えを実装します。

    override func viewDidLoad() {
        super.viewDidLoad()
        let yes     = NSLocalizedString("Yes", comment: "")
        let no      = NSLocalizedString("No", comment: "")
        let cancel  = NSLocalizedString("Cancel", comment: "")
        let confirm = NSLocalizedString("Confirm", comment: "")
        let search  = NSLocalizedString("Search", comment: "")
  
        print(yes)
        print(no)
        print(cancel)
        print(confirm)
        print(search)
    }

このコードを実行すると以下のように出力されます。

Yes
No
Cancel
Confirm
Search

言語を日本語に切り替えることによって文字列が日本語になるか確認します。

Edit SchemeApplication Language を変更すると簡単に確認ができます。

実行結果は以下のようになります。

はい
いいえ
キャンセル
確認
検索

Application LanguageでJapanese選択すると日本語に切り替わることが確認できました。 このようにアプリケーションで必要な文字列を定義して使用していきます。

翻訳のフロー

多言語対応されたアプリケーションを運用するには普段と違った工程が必要となります。 1つの言語のみサポートするサービスとの大きな違いは機能追加ごとに翻訳のプロセスが入ることです。 翻訳サービスを使用したり、社内に翻訳を担当するチームがあったりと様々だと思いますが、 現在のWEARはチーム内で完結しています。 開発段階で翻訳が必要なリストを作成し、各言語を母国語とするメンバーが翻訳を担当しています。

Localizable.stringsをエンジニアが管理する方法もありますが、Apple社が案内している翻訳の手順にXLIFF(XML Localization Interchange File FormatXLIFF)を使用した運用があります。

画像出展:インターナショナライゼーションとローカリゼーションのガイド

XcodeからXLIFFファイルにエクスポートし、翻訳者がXLIFFを編集し翻訳完了後にXLIFFファイルをインポートをします。Androidなど複数プラットフォームで多言語対応を進める際に有用です。

まとめ

今回はiOSアプリの多言語化について紹介しました。今回は文字列だけでしたが、実際には日付・価格などの表示やレイアウト対応など考慮するべきことは多々あります。より多くのユーザーにサービスを使って頂けるよう日々改善を続けています。少しでも興味がある方は、ぜひ一度オフィスにお越しください。 下記からのエントリーもお待ちしています。

www.wantedly.com

参考文献

カテゴリー