LoginSignup
10
7

More than 5 years have passed since last update.

多言語対応を試してみた

Last updated at Posted at 2017-08-08

はじめに

実際やるとなるとこれだけでは足りない部分(複数形の話など)があると思いますが、iPhoneの言語設定によってアプリの表示言語を切り替える方法を試してみた際の作業メモです。
音量変更アプリのソースに追加・変更を行なっています。

Localizationsへの追加

多言語の設定を行うために、まずPROJECT - Infoの「Localizations」へ設定の追加を行います。
2017-08-04 13.43.32.png

「+」をクリックして、一覧を表示し、「Japanese(ja)」を選択します。
2017-08-04 13.44.19.png

選択画面が表示されますが、今回は以下の状態(変更なし)で完了します。
2017-08-04 13.45.30.png

以下のように、「Japanese」が追加されます。
2017-08-04 13.52.57.png

Localizable.stringsの追加

言語を切り替える対象となる単語を登録するファイルの追加を行います。

追加ファイルのテンプレートの追加画面で、「Strings File」を選択し、次へ進みます。
2017-08-04 13.56.51.png

ファイル名を「Localizable.strings」にして、ファイルを作成します。
2017-08-04 13.57.55.png

追加されたファイルを選択すると、Inspectorに「Localization」の欄にボタンが表示されるので、これをクリックします。クリックすると、「Do you want to localize this file?」と書かれた画面が表示されるので、「Localize」を選択します。
2017-08-04 14.00.06.png
2017-08-04 14.01.08.png

Inspectorに「Localization」の欄にチェックボックスが表示されます。
2017-08-04 15.09.02.png

「Japanese」のチェックボックスをオンにすると、「Localizable.strings」の下にファイルが追加されます。
2017-08-04 14.03.23.png

Localizable.strings

Localized.stringの内容を「Key値 = 表示する文字列;」で設定します。

Localizable.strings(Japanese)
connectbutton = "接続";
talkbutton = "話す";
talktext = "こんにちは";
Localizable.strings(Base)
connectbutton = "connect";
talkbutton = "talk";
talktext = "Hello";

上記のように、キーごとに対応させてそれぞれの言語の設定を行います。

ViewController.swift

言語によって表示を変えたい部分に使用する文字列は以下の関数を使用して取得します。

NSLocalizedString
func NSLocalizedString(_ key: String, tableName: String? = default, bundle: Bundle = default, value: String = default, comment: String) -> String

viewDidLoadに以下の記述を追加する。

viewDidLoad
        let connect = NSLocalizedString("connectbutton", comment: "")
        let talk = NSLocalizedString("talkbutton", comment: "")
        myConnectButton.setTitle(connect, for: .normal)
        myTalkButton.setTitle(talk, for: .normal)

tapTalkButtonで以下のように変更します。

tapTalkButton
    @IBAction func tapTalkButton(_ sender: Any) {
        //話す内容の設定
        //let talkText = "こんにちは"
        let talkText = NSLocalizedString("talktext", comment: "")

        //略

    }

画面表示

iPhoneの言語設定を変更すると以下のように表示が変化します。
・Japanese
2017-08-07 10.45.19.png

・English(日本語以外)
2017-08-07 10.46.57.png

※ それぞれの言語のLocalizable.stringsファイルを設定すれば、それぞれ設定した内容で表示されますが、個別に設定されていない言語が設定された場合はBaseで設定された内容が表示されます。
例)ロシア語
2017-08-07 10.59.48.png

おわりに

今回は、言語設定を変更した際にそれぞれ異なる表示ができるか試した形になります。
実際に本腰を入れて多言語対応する場合は、もう少し深いところまでやっていかないとならないと思いますが、手法について学べたということで今後に活かしていきたいと思います。

参考

以下のリンク先を参考にさせていただきました。
Internationalization and Localization Guide
[iOS] ゼロから始める!簡単!多言語対応!
iOSアプリの国際化対応の勘所とTips集(Swift版)
この記事では触れていない設定についてなど記載されていますので、ご一読いただくと良いかと思います。

10
7
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
10
7