質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.77%

LaunchScreen は多言語対応可能なのか?

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,420

score 11

 前提・実現したいこと

日本語と英語の両方で使えるアプリ開発中。
起動時の画面(スプラッシュ)となる画像を、日本語版、英語版で用意済。
各言語のLaunchScreen.Storyboardに、UIImageとして貼り付けることで、起動時のスプラッシュ画面として、言語設定が英語の場合は、英語版の起動画面(英語版の画像)、日本語の場合は日本語版の起動画面(日本語版の画像)を出したい。

しかし、起動スプラッシュ画面は、日本語設定時でも、英語版の起動画面になる。

 発生している問題・エラーメッセージ

エラーメッセージは特にないが、言語設定を日本語で設定しているにもかかわらず、LaunchScreen.storyboard(Japanese) のイメージ通りにならない。
ちなみに、LaunchScreen.storyboard には、UIImageを貼り付けて、イメージファイルとして、英語版用のイメージファイル名(英語の題名付)、日本語版のイメージファイル名(日本語の題名付)を設定。

UIImageを設定したのは、LaunchScreen.storyboard(Base)、(English) とLaunchScreen.storyboard(Japanese)。

```

 該当のソースコード

LaunchScreen には、カスタムモジュールは設定できない仕様なので、コード設定ではなく、StoryboardへのUIImageの設定のみ

 試したこと

UIImageの設定した上で、多言語設定も試みたが、同じ結果。
Main.Storyboardでは、問題なく、多言語対応できていることは確認できているが、なぜか、LaunchScreen の場合だけは、まったく多言語対応されていないように見受けられる。
そういう仕様ということは、うすうす感じているが、それなら、最初から、Localizationできるかのような画面を出さないで欲しいというのが本音(時間の浪費)

ターミナルで、
$ ibtool LaunchScreen.storyboard --generate-strings-file test.strings

のようにして、test.stringsを生成して、貼り付けたオブジェクトのIDを取得してみることも試みたが、内容は空っぽだった。Main.storyboard では、しっかり、オブジェクトIDを出力しているので、明らかに、Main.storyboardとLaunchScreen.storyboardでは扱いが違うと言わざるをえない。

 補足情報(FW/ツールのバージョンなど)

Xcode9.2 (iOSは最新バージョン)
swift4

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

LaunchScreenはローカライズに対応していません。

https://qiita.com/moriteru/items/b25b6dfe67ccb362b5e9

にあるように、LaunchImageを使って言語ごとの起動画像を作成し、
それをInfo.plistに登録すればスプラッシュ画面のローカライズができます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/16 21:03

    TakeOne様、貴重な回答、ありがとうございます。

    コメントを頂いてから、紹介頂いた方法を試してみましたが、どこが悪いのか、うまくいっていません。
    10時間ぐらい粘ってみましたが、App Icons and Launh images の設定のところをどのように設定してすればいいのか、ご存知でしたら、教えて頂ければと思います。

    Launch Screen File 、Launch Images Source とも、何もセットしないでいいのでしょうか?
    info.plist を紹介頂いたようにセットし、イメージファイルはLocalizeはしています。
    Localizeしたイメージファイルは、Main.storyboard上では、きちんと、言語設定に基づいて、目的の画面を表示するので、イメージファイルのLocalizeは問題なく、できていると思います。
    起動画面だけは、他にもいろいろ設定を変えたりしましたが、General->App Icons and Launch images の設定がはっきりしないので、いまだ、解決していません。

    もし、方法が分かる方がいらっしゃったら、ご教授頂ければ、幸いです。

    キャンセル

  • 2018/03/16 21:09

    肝心なことを記載していませんでした。

    起動時のスプラッシュは、黒い画面です。Launch Screen Fileを設定していないのだから、当たり前なのですが、info.plistの設定がそのあたりをカバーするのかと思っていましたが、どうも私が重大な勘違いをしている気がします。
    イメージファイル名もinfo.plistに設定しており、ファイル名の記載ミスもありません。
    もうやれること、全部やり尽くしたけど、黒い画面のまま、といったところでしょうか。

    もう少し、模索してみます。

    キャンセル

  • 2018/03/16 22:00

    今まで試みてきた段取り:

    1 英語版イメージファイルをLocalizeした後、生成した同名のJapaneseのものについては、手動で、日本語版のイメージファイルに差し替える。
    2 info.plistは、紹介頂いた方法で編集し、セット(イメージファイル名はLocalizeしたファイル名を拡張子のpngは外してセット)
    3 ここで起動してみたが、黒い画面が出るのみ。
    4 そこで、次は、これを設定しないとやはりダメだろうということで、
      Images.xcasssetsのLaunchImageに、Localizeしたイメージファイルを設定
    4 General->App Icons and Launch images のところは、先ほどの「LaunchImage」 を選択
    5 実行するが、最初のスプラッシュ画面は残念ながら、相変わらず、真っ黒な画面で数秒表示されます。
    6 検証方法は、シミュレーターで行っていますが、前回のスプラッシュの記録が残るという話なので、アプリは毎回、アンインストールして、クリアしてから行っています。

    実施してみたのは、おおまかに、こんなところでしょうか。

    あと考えられるのは、info.plistに用意したのが、iphone6用のものだけなので、これが影響しているかもしれませんが、一度も成功したことがないので、試行錯誤するしかない状況です。全てのパターンのイメージを用意してみて、どうなるかといったところを時間のあるときに試してみようとは思っています。

    キャンセル

  • 2018/03/17 01:55

    結局、
    https://qiita.com/moriteru/items/b25b6dfe67ccb362b5e9 に記載されている、info.plist をまるごとコピーして、バージョンとイメージファイル名だけ変更したものと差し替えたところ、真っ黒のスプラッシュ画面の問題は解消。info.plistを自分で設定していたところに問題があったようだ。
    比較しても、綴りのミスはないので、別の要因だろうが、エラーメッセージが出ていないので、原因不明だが、とりあえず、次のことははっきりわかった。
    General->App Icons and Launch images のところは、
    Launch Image Source は、Don't use asset catalogs で何もセットしなくていいし、
    Launch Screen File も空、何もセットしなくていい。
    これで、とりあえず、スプラッシュ画像が黒くなることはない。

    しかし、スプラッシュ画像の、多言語切り替えは相変わらず、シミュレーションで、英語を選んでいるのに日本語版が出る一方、メインストリートボードでは英語版のイメージがでるなど、ちぐはぐの状態。

    そこで、次の推測をした。
    最初の起動画面であるスプラッシュは、システム設定の設定言語に従うようだ。つまり、XcodeのProduct->Scheme->Application Language で設定した言語 の情報を見てくれていない気がする。
    スプラッシュ画像に関しては。

    メインストリートボード等は、XcodeのProduct->Scheme->Application Language で設定した言語に合わせて、きちんと、多言語対応している。
    つまり、Xcodeが、スプラッシュ画像の多言語対応について、うまく対応できていない、という印象。
    最初から、実機で試験していれば、Xcodeの不可解な動きで悩まされることはなかったかも。。。

    結局、3日間、無駄に時間を浪費する結果となったが、むしろ、皆様の助言のおかげで、3日程度で澄んだというべきかもしれない。感謝申し上げます。
    ありがとうございました。

    キャンセル

+2

LaunchScreenではできないようです。

Human Interface Guidelines

Avoid including text on your launch screen. Because launch screens are static, any displayed text won’t be localized.

と書かれていますのでこれが関連しているのかもしれません。

私も試してみましたが、適用されませんでした。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/15 19:04

    早速の回答、ありがとうございます。

    やはり、そうでしたか。
    Human Interface Guidelinesからの引用、参考になりました。

    この問いは過去にも何度もあったと思いますが、バージョンが変わるたびに、過去の解決策が使えなくなっているというのは、本当に悩ましいですね。

    その後も、info.plistも 同様にLocalizationを試み、生成されたそれぞれのLaunch screen interface file base name を独自のものに変更したりしましたが、うまくいかず。
    白旗宣言をしておきます。

    私がとんでもないミスをしているだけでないことが確認できただけでも、救いでした。

    有効な方法がこのまま見つからなければ、ここで設定するのはやめて、スプラッシュ後の画面遷移に工夫をしてみようと思っています。

    今後、何かの機会に解決策が見つかれば、事後報告させて頂こうとは思っています。
    ありがとうございました。

    キャンセル

+1

ベストアンサーのシンプルな回答が、すべてだが、補足しておきます。

起動直後の数秒間だけ表示するスプラッシュ画像を、多言語対応したい場合、

当初、試みるであろう
LaunchScreen.storyboard での多言語対応はできない。

Localizeできるので、あたかも簡単にできそうに見えるが、騙されてはいけない。
できないのに、できるように表示する、アップルの中途半端な表示は、未完成なのに商品化してしまったのではないかという疑いさえ、感じさせる。

Images.xcasssetsのLaunchImageに、Localizeしたイメージファイルを設定する方法もうまくいかない。

つまり、上記2つは、最初誰もが、これでいけそうに思って、はまる道ではないかと思う。
しかし、結局、できないということだ。(ふざけるな、アップル と怒るべきなのか?)

結局、ベスト回答で紹介頂いたURLページの記載の通りに、設定すれば、解決するということです。
https://qiita.com/moriteru/items/b25b6dfe67ccb362b5e9 

ただし、注意点として、試験対象となる画面サイズがないと、スプラッシュ画像は真っ黒で、何も表示されない。

したがって、info.plistの例が掲載されているが、丸ごとコピーして、バージョンの番号と、イメージファイル名だけ、合わせるようにしたほうが、間違いはないだろう。
シミュレータで、iPhone6モードで試験をしていたが、おそらくこの画面サイズだろうと、info.plistを作成していたが、うまくいかなかった。このへんの知識がない人は、紹介頂いたURLページに記載されている、info.plistの内容まるごとコピーして、必要なところだけ修正する形のほうが、苦労しなくて済むということだ。

イメージファイルを全部のサイズ分、用意するのは大変なので、試験的に試みたい場合は、全部、同じイメージファイル名にしても、エラーにはならなかったし、結局、この粗雑なやり方でも、スプラッシュの多言語対応が確認できた。

あと、イメージファイル名のせいで、うまくいかないことが初期の頃、あったので、イメージファイル名もアンダーバーを入れるとかそういうのは止めたほうがいいかもしれない。ただ、これはこちらの偏見なので、まともに信じないこと。そういうことがあったというだけで、まじないのつもりで、試してみるといいかもというだけの話である。

ちなみに、General->App Icons and Launch images のところは、
Launch Image Source は、Don't use asset catalogs で何もセットしなくていいし、
Launch Screen File も空、何もセットしなくていい。

わかってしまえば、これほど、簡単なものはないが、わからないと、かなり試行錯誤することになり、私のように3日間も時間を浪費することになる。
Appleの開発に入って数ヶ月だが、もういい加減、C++の開発のほうに戻りたい気分だ。
アップルの奴隷になっている気がして仕方がない。

イメージファイルのLocalizeは、紹介頂いたURLページの通りにすればいいが、置き場所は、どこでもよさげ、と書いてあったが、どこでもということはないようだ。Projectフォルダの下、というか、Main.storyboardと同じディレクトリであれば、間違いがないだろう。私はそれより上のところにコピーしてしまったので、Localizeボタンが表示されず、最初、戸惑ったことを付記しておく。

それと、シミュレータで動作試験を行う場合、スプラッシュに関しては、設定言語を切り替えるために利用する、XcodeのProduct->Scheme->Application Language は、スプラッシュ画面のテストの時だけは、信用してはいけない。

それ以外はこれを信用して利用してもいいが、スプラッシュのテストについては、注意が必要ということだ。

Xcode側ではなく、Simulator側での言語設定に従っているとしか思えない動きをしているからだ。
おそらく、実機の言語設定の切り替えで、テストしたほうが、誤認することはないだろうが、シミュレータでテストしている人が圧倒的多数だろうと思うので、忠告しておく。

もし、実機でのテストが難しいようであれば、XcodeのProduct->Scheme->Application Languageにおいて、英語とか、日本語とかを選択するのではなく、System Languageを選択して、面倒だが、Simulatorのほうの設定で、言語を切り替えて、テストするべきだ。

しかし、これはスプラッシュという画面のテストをするときだけの注意事項であることに留意して欲しい。

Main.Storyboard上でのイメージ画面などは、従来通り、XcodeのProduct->Scheme->Application Languageで言語設定しても、きちんと連動して、多言語対応ができていることを確認できるだろう。
あくまで、スプラッシュ画像のテストのときだけ、気をつけたほうが良いということである。

これがアップルのバグなのか、こちらのやり方の問題なのか、正直、分からないが、個人的には、そういう結論に至ったということだ。

あと、スプラッシュ画像は、キャッシュに残るので、一度テストしたら、再度テストするときは、インストールされたアイコンは削除してから、行うように習慣づけないと、いつまでも原因が分からず、挫折することになるだろう。

最後に、info.plistをいじるので、自信のない人は、できるだけバックアップを確保しておくこと。
info.plistに間違って改行しただけで、エラーになるので、わからない人はパニックになるだろうし、修復不能になって、何度、おしゃかにしたことか。。。

以上、協力頂いた方々には感謝します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/17 11:57

    追記

    イメージファイルをLocalizeしておくわけだが、当初、例えば、image_en、imae_jp というふうに、英語版の画像と、日本語版の画像を用意し、両方にLocalizeしていたが、これも、試行錯誤を長くする原因となった。

    実際は、Baseとなるイメージファイル一つだけをセットして、それに対してだけ、Localizeをする。その結果、英語、日本語がチェックなしで出てくる。チェックをすべて入れれば、それに応じて、フォルダが生成される。私の場合は、Baseに英語版の画像を使用し、Localizeすると、英語版、日本語版のフォルダも生成されて、いずれの画像も、当然、英語版の画像がセットされるので、日本語版のフォルダ内に生成された画像だけを、日本語版の画像に手動で差し替えた。このやり方が正しいかは分からないが、別のフランス語のブログでは多言語対応ではないが、イメージのLocalizeの方法で使っていたので、なるほど、そういうことかと、気づいた次第。
    もちろん、日本語版だからと、ファイル名にjpをつける必要はない。英語版だろうが、日本語版だろうが、全部同じファイル名でも、フォルダ名が違うから、それで問題はない。
    ファイル名はすべて同じということである。
    このへんも、初めての人間には大きな壁となるだろうから、老婆心ながら、書いておく。この記事が役に立つことを願って。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る