iOS13でアプリ名のローカライズがおかしくなる問題
日本とと英語に対応したアプリを作成していて開発メンバー向けに配布したところ「iPhoneのホーム画面に表示されるアプリ名を正式版にして欲しい」と連絡が来た。
そのとき実際にはアプリ名を設定済みでSimulatorでも検証機のiPhone7(iOS12.4.1)でもアプリ名の表示を確認していた。
iPhoneのホーム画面に表示されるアプリ名のローカライズ
InfoPlist.string
というStrings File
を作成
XcodeProjectのLocalizations設定
デフォルトのEnglishに加えて、+
からJapaneseを追加。
このときローカライズ対応するファイルを指定しないと追加されないので、あらかじめ InfoPlist.string
を作成しておく。
必要に応じて Use Base Internationalization
をチェックするとBaseも追加される。
ローカライズに対応したファイルはXocde上では1つのファイルが折りたたまれたように表示されるが
実体は言語毎にディレクトリが作成されて内包されている。
en.lproj/InfoPlist.strings
ja.lproj/InfoPlist.strings
InfoPlist.stringsにアプリ名を設定する
言語毎にCFBundleDisplayName
を指定する。
"CFBundleDisplayName" = "ローカライズ";
以上で通常のアプリ名ローカライズ対応が可能となる。
iOS13でアプリ名のローカライズがおかしくなる問題
問題のプロジェクトは元々Objective-Cで作成されている古いプロジェクトで、今回改修していて再現した問題。
ローカライズの現状
プロジェクトのローカライズ設定は3つ設定済み
- Base
- English - Development Language
- Japanese
InfoPlist.strings
は English とJapaneseのみ設定している。
再現環境
- iOS13系でiPhoneの使用言語が日本語の端末
iOS12系では再現しなかった。
回避策
ところで iOS 13 にしたらアプリ名が日本語じゃなくて英語表記になっちゃったのはどうやったら直るんですかね。
— IIMURA Takuji (@limura) September 22, 2019
Info.plist で CFBundleDisplayName は設定してて正しいはず(というかそこは書き換えてないので多分違う原因とは思うんだけどもわからん)
https://twitter.com/limura/status/1175619714355097601
このツイートのスレッドを見ると解決策が書かれていて、日本語のローカライズをもう一つ追加で解決したとのことなのでマネする。
言語一覧のOthersから Japanese(ja-JP)
を追加。Xcodeでは InfoPlist.strings (Japanese (Japan))
と表示される。
この対応で問題解決する事が確認できました。
CFBundleDisplayName
ではない通常のローカライズ NSLocalizedString
の方は InfoPlist.strings (Japanese (Japan))
ではなく従来通り InfoPlist.strings (Japanese)
でローカライズできていたので、iOS13のホーム画面の実装の問題ということでしょうか。
iOS11か12あたりでローカライズのレスポンスも ja_JP
の他にも en_JP
のような値が取得できるようになっていた気がするのでその関係かもしれないと思いました。
この件はこれにて。