Xcode10・iOS12 にアップデートしたら Cordova アプリの UI が英語表現になった
目次
事象
Cordova アプリ内で、input type="date"
を使っている箇所がある。input type="date"
は、iOS の場合は年月日をドラムロールから選択する UI で表示され、通常の日本語環境では YYYY / MM / DD
形式で表示され、ドラムロールの UI も「2018 年 10 月 13日」といった表示になる。
しかし、この度 Xcode10・iOS12 にアップデートして Cordova プロジェクトを再ビルドしたところ、input type="date"
の表示が Oct 13 2018
といった英語表記に変わってしまった。
調査
HTML5 としては、input type="date"
の UI に関する表示仕様がこれといって定まっておらず、ブラウザごとにデフォルトスタイルが違ったりする。そしてそのブラウザが動作する OS の言語設定に合わせて、年月日の表現方法も異なり、Web ページ開発者が <html lang="ja">
といったコードで言語設定を変更することはできない。
ということは、iOS12 にしたことで地域と言語の設定が変わって、そのシステム設定に影響を受けて英語圏の表記になっているのか?と思ったのが、「設定」アプリを開くと言語も地域も「日本語」になっていて問題なし。
それに、Safari ブラウザで input type="date"
が実装された Web ページを開くと、そちらは日本向けの UI のままで、Cordova アプリだけが、なぜか英語向けの日付表現に変わっているのだ。
原因特定
今回、Cordova のバージョンは変更していないので、Cordova 内部のコードが影響しているとはあまり考えにくい。そうなると Xcode のバージョンアップが影響しているか?
そう思い、.xcodeproj
ファイルを開いてみると、原因が特定できた。
Info.plist (Xcode GUI でいう「Info」タブ) の中に「Localization native development region」という項目があり、これが「English」になっていた。どうもこのローカライゼーションに関する設定が怪しそうだ。
対処法
この「Localization native development region」項目の値を 「English」から「Japan」に変更 すると、input type="date"
の表示書式が日本語に戻った。
Info.plist の物理名称でいうと、「CFBundleDevelopmentRegion」に「en_US
」ではなく「ja_JP
」を設定すれば良い、ということ。
今後この設定を強制していきたいのであれば、config.xml
にて以下のような設定を入れておけば良い。
<platform name="ios">
<allow-intent href="itms:*" />
<!-- 中略 -->
<config-file parent="CFBundleDevelopmentRegion" target="*-Info.plist">
<array>
<string>ja_JP</string>
</array>
</config-file>
</platform>
解決
コレにて Cordova アプリの UI も日本語圏の表現に戻り、無事解消。それにしてもどうして Xcode10 からこのローカライゼーション設定が影響するようになったのだろう…。