日本語のみ対応しているFlutterアプリが、Appストア上で「言語:英語、日本語」と表示されて困ってしまいました。
(※スクリーンショットはTestFlightアプリなので多言語が表示されるのは正しいのですが、ここにアプリ非対応の英語が表示されて困ったという話です)
解決のため、アプリの表示言語の仕組みを調査しました。
結論
Appleの下記サイトに表示言語の決定方法が記述されています。
Technical Q&A QA1828: How iOS Determines the Language For Your App
iOSはどのようにアプリの表示言語を決めるのか
言語は以下の順番で決定されます。
- iOSは最初にユーザーの設定言語を調査します。これは「設定>言語と地域」の一番上の言語です。
- (1)の言語がアプリでサポートされているか?を確認します。アプリバンドルを検索して、(1)の言語に一致する .lproj フォルダを探します。
2.1 フォルダが存在する場合、アプリがその言語にローカライズされているとみなし、アプリ用に選択します。
2.2 フォルダが存在しない場合、「設定>言語と地域」での次の言語を選択し、上記のチェックを繰り返します。 - 上記のチェックに該当する言語がアプリでサポートされていない場合、iOS はアプリの Info.plist の CFBundleDevelopmentRegion に一致する言語を選択します。(この場合は Info.plist の CFBundleLocalizations の設定も必要になるようです)
アプリストアに表示される対応言語について
次に、ストアのアプリ情報欄に表示される言語についてです。
ここの表示については、QA1828 の注釈に書いてあります。
アプリストアに表示される言語欄は、 iTunesConnect(現AppStoreConnect)での設定よりも、.lprojフォルダの存在が優先されます。
そして、アプリストアの言語欄にアプリがサポートしていない言語が表示されている場合は、以下の項目をチェックすれば良いようです。
- .lprojフォルダを使用している場合 → フォルダの存在を確認しましょう
- .lprojフォルダを使用していない場合 → Info.plist の CFBundleLocalizations に言語を設定しているか確認しましょう
まとめ
おそらく、下記を行えばアプリの表示言語・ストアでの表示言語ともに対応できるのでは、と思います。
- 多言語対応するアプリの場合 → 各言語の .lprojフォルダ の存在を確認
- 多言語対応しないアプリの場合 → Info.plist の CFBundleDevelopmentRegion と CFBundleLocalizations の設定を確認
ただ、多言語対応しているアプリでも、サポート範囲外の言語のユーザーを想定して、 CFBundleDevelopmentRegion と CFBundleLocalizations は設定しておくべきでしょうか。
参考資料
Technical Q&A QA1828: How iOS Determines the Language For Your App
免責
記事中では多言語対応についても書いていますが、私自身多言語アプリを作成したことがないので、誤りがあるかもしれません><
正しい情報は公式ドキュメント QA1828 を参照してください