Corredor

ウェブ、プログラミングの勉強メモ。

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 からこのローカライゼーション設定が影響するようになったのだろう…。

たった2日でマスターできるiPhoneアプリ開発集中講座 Xcode 10 Swift 4.2対応

たった2日でマスターできるiPhoneアプリ開発集中講座 Xcode 10 Swift 4.2対応