【Swift】ローカライズとiPhoneの使用言語


1.はじめに

 英語と日本語に対応したアプリを作ったので、iPhoneの言語設定をちょこちょこ変えてテストをしていた時に、想定した言語で表示されなかったので書き留めておきます。
 
 ローカライズの設定
 ・英語(base)
 ・日本語
 
 「PROJECT > Info」 の設定
 

2.コード

ViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()
    print(NSLocalizedString("hello", comment: ""))
}
Localizable.strings(Base)
"hello" = "hello english";
Localizable.strings(Japanese)
"hello" = "こんにちは 日本語";

3.想定

 iPhoneの使用言語の設定とアプリ内での表示の想定。
 iPhoneの使用言語は「設定 > 一般 > 言語と地域 > iPhoneの使用言語」で変更できます。

iPhoneの使用言語 アプリ内の表示
1 日本語 「こんにちは 日本語」
2 English 「hello english」
3 Español 「hello english」

 つまり、iPhoneの使用言語を日本語または英語にした場合は、それぞれ該当する言語で表示される。
 それ以外の言語に設定した場合は、英語で表示される。

4.うまくいかなかったパターン

 iPhoneの使用言語を日本語、英語以外に設定した場合に日本語で表示されたり英語で表示されたりした。
 これはアプリのローカライズが「iPhoneの使用言語」だけではなく、その下の「使用する言語の優先順序」にも影響されるためです。
 
 

 iPhoneの使用言語に日本語、英語を設定した場合は、それぞれ該当する言語で表示されます。
 iPhoneの使用言語に日本語、英語以外を設定した場合は、使用する言語の優先順序が影響します。
 日本語と英語のうち、優先順序の上位にある言語でアプリがローカライズされます。
 
 
 つまり、以下のような設定の場合は英語でローカライズされます。
 
 
 
 また、以下のような設定の場合は日本語でローカライズされます。
 
 

5.おわりに

 iPhoneの使用言語をコロコロ変えるユーザーはあまりいないと思うので、実際にはそこまで影響は出ないかなと思いますが、テストでちょっと戸惑ったのでメモしときます。