こないだのアプリ開発中に、日本語と英語両方とも対応したアプリがiOS8でうまく思う通りに表示されない問題が起きました。
問題の現象
前の利用者にシステム言語を中国語に設定されたiOS8の社内テスト端末で、
作っているアプリを開いたら、日本語が表示されてしまいました。
「CFBundleDevelopmentRegion」を英語に設定しているので、
システム言語が中国語になっているユーザーに英語が表示されるはずだと思っているのに、何故か日本語が表示されています。
[table id=5 /]
想定表示:英語
実際表示:日本語
調査結果
諸々調査と実験した結果、原因を判明しました。
結論から言うと、iOS8から端末の「言語と地域」設定で
「使用する言語の優先順序」という項目が追加されました。
システムの言語設定がアプリの対応言語範囲に入っていない場合、「使用する言語の優先順序」が第一候補として適用されました。「使用する言語の優先順序」になければ、第2候補の「CFBundleDevelopmentRegion」設定が応用されます。
調査中に、下記の2つの罠に引っかかれてしまいました。
記事を読んでいる方も気をつけてください。
・言語を追加、削除したら、プロジェクトを一度cleanしないと反映されない
・実機ではいけるのに、シミュレータでCFBundleDevelopmentRegionの設定が認識されない。
iOS7
そして実験からiOS7でもシステム言語とアプリの対応言語が合わない場合、
CFBundleDevelopmentRegionが第一候補ではないことを判明しました。
iOS7でもしシステム言語を変更したことがあれば、設定していたシステム言語から、時間の新しい順でアプリの対応言語と比較され、一致する言語が見つけられたら、その言語が表示されることになります。使っていた言語の中に、アプリの対応言語と一致する結果がなかったら、CFBundleDevelopmentRegionが適用されます。
まとめ
最後、複数の言語を対応したアプリの言語適用順をOSバージョン別でまとめました。
[table id=6 /]
※ 「CFDRegion」=「CFBundleDevelopmentRegion」
投稿者プロフィール
最新の投稿
- iOS2015年3月20日サイズにコミット!意外と知らないiOSアプリのダイエット方法
- iOS2015年1月14日iOS8でローカライズ対応アプリの言語表示がうまくいかない問題
- iOS2014年9月15日iPhone6/iPhone6 Plus画面サイズ対応
- iOS2014年9月2日意外と知られていないIPAファイルの真実