LaunchScreen Storyboardの多言語化

スプラッシュウィンドウをこれまでLaunchImagesで作成していた方も多いかと思いますが、iPad OS登場以降はiPadの画面分割への対応からLaunchScreen.storyboard(もしくはLaunchScreen.xib)の使用が推奨されるようになりました。
アプリが複数の言語に対応している場合、スプラッシュウィンドウも多言語化(ローカライズ)する必要がありますので、今回はLaunchScreen.storyboardの多言語化の方法を調べてみました。

#結論・・・意外と簡単
LaunchScreen.storyboardに表示する画像を言語ごとに分けることはできなかったのですが、起動スプラッシュに使用するStoryboardの名称がInfo.plistに設定される様になっている為、Info.plistを多言語化して言語ごとに使用するStoryboardを変えるようにすれば簡単にできました。

#手順

環境：Xcode 11(といっても今回の手順はXcodeのバージョンには依存しません)

1. 今回のサンプルプログラムでは英語と日本語に対応するものとします。Xcodeの[PROJECT] - [Info]にある[Localizations]に英語と日本語を設定します。
![スクリーンショット 2019-09-29 16.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/9983c21a-e652-d8a4-b0b3-b9302012ac47.png)

2. 英語用と日本語用のスプラッシュウィンドウの画像を用意します。
<img width="400" alt="スクリーンショット 2019-09-29 16.34.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/06338773-c678-f8fc-9007-4a9f41a7c30e.png">

3. Assets.xcassetsに英語用のスプラッシュウィンドウの画像と日本語用のスプラッシュウィンドウの画像を登録します。
![スクリーンショット 2019-09-29 16.39.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/1543c477-72be-409a-91a9-3f46925e5d00.png)

4. まずデフォルトで存在するLaunchScreen.storyboardは英語用のスプラッシュウィンドウにします。LaunchScreen.storyboardのViewControllerにUIImageViewを追加し英語用のスプラッシュウィンドウの画像を設定します。
![スクリーンショット 2019-09-29 16.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/de39c475-271a-a014-3b88-8955a18be98e.png)

5. 次に日本語用のスプラッシュウィンドウを表示する為のStoryboardを追加します。Xcodeの[File]-[New]-[File...]を選択しダイアログで[Storyboard]を選択し[Next]を押下します。
![スクリーンショット 2019-09-29 16.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/368f28fa-7d7e-2a9e-6c34-ee249817af50.png)


6. Storyboardの名称は[LaunchScreen_Japanese.storyboard]として[Create]を押下します。
![スクリーンショット 2019-09-29 16.45.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/a9fed4b4-7cb8-cb7b-d2eb-f40872d660d8.png)

7. 作成されたLaunchScreen_Japanese.storyboardにUIViewControllerを追加し、[is Initial View Controller]にチェックを入れます。そしてUIImageViewを追加し日本語用のスプラッシュウィンドウの画像を設定します。
![スクリーンショット 2019-09-29 16.50.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/f7caa2b7-c713-103b-e406-d78ae1e86d68.png)
これで英語用のスプラッシュウィンドウを表示するStoryboardと日本語用のスプラッシュウィンドウを表示するStoryboardの用意ができました。次からは言語毎にStoryboardを使い分ける設定を行います。

8. Xcodeの[TARGETS]の[App Icons and Launch Images]で[Launch Screen File]が[LaunchScreen]になっていることを確認します。
![スクリーンショット 2019-09-29 16.51.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/9e994c15-92d6-963c-f6b6-f29ef9098aa7.png)


9. この状態でInfo.plistを見るとLaunchScreen.storyboardの名称がUILaunchStoryboardNameというキーに設定されていることが分かります。
![スクリーンショット 2019-09-29 16.53.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/4d61b0cf-ccf1-e402-4f1d-5f5837c34e32.png)
ということで、このUILaunchStoryboardNameの値を言語毎に変えられる様にします。

10. Info.plistを多言語化する為のInfoPlist.stringsを追加します。Xcodeの[File]-[New]-[File...]を選択しダイアログで[Strings File]を選択し[Next]を押下します。
![スクリーンショット 2019-09-29 16.56.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/e62959db-7b52-55a0-8afc-e9d6c625dabb.png)

11. ファイル名を[InfoPlist.strings]として[Create]を押下します。
![スクリーンショット 2019-09-29 16.57.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/77ecbd87-6493-3a8e-06b5-b7adf02cddef.png)

12. 追加したInfoPlist.stringsを選択し[Localize...]を押下します。
![スクリーンショット 2019-09-29 16.58.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/16727407-db05-e347-83bb-af6e7fad626b.png)


13. [Do you want to localize this file?]と聞かれますので日本語を選択して[Localize]を押下します。
![スクリーンショット 2019-09-29 16.59.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/a885746b-1350-bf7d-f373-6752b5a42e5c.png)

14. InfoPlist.stirngsに以下のキーと値を設定します。
"UILaunchStoryboardName" = "LaunchScreen_Japanese";
![スクリーンショット 2019-09-29 17.01.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/a1484254-000f-a4c1-26ba-e265c002d405.png)

これで日本語のときだけスプラッシュウィンドウにLaunchScreen_Japanese.storyboardが使用され、それ以外の言語の時はデフォルトのLaunchScreen.storyboardが使用される様になりました。

では動かしてみましょう。

[iOSの言語設定が英語の場合]
![english.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/d0357cb2-4e97-8903-7a43-800a0b7eb468.gif)

[iOSの言語設定が日本語の場合]
![japanese.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362719/607ceb4f-e3c7-e1b4-974d-6ceccfae6729.gif)


#参考文献
[How to localize launch screen - Stack Overflow](https://stackoverflow.com/questions/30079257/how-to-localize-launch-screen?noredirect=1&lq=1)