[Swift]Xcode9から言語設定の扱いが変わった?

いつものようにToolBarを設定したのだけれど、なぜか英語設定のまま変わらない...
という事象にぶちあたったのでそのメモ。

SystemButtonとかの言語設定について

です。

Xocde v9.2

UIToolbarにはシステム側でいくつかのタイプが表示されていて、
UIBarButtonSystemItemをみればわかるのだけれど、

  • add
  • edit
  • done
  • cancel

などなど。これらはアイコンが設定されるものもあれば、文字列がセットされるものもあります。
UIBarButtonItemStyle.editUIBarButtonItemStyle.doneで作った場合、こうなります。

en

英語...ですね。
日本語...にしたいですね?かと言って作るときはUIBarButtonItem(barButtonSystemItem:target:action:)と...
設定するところはないのです。

どうするのかというと、端末の言語設定を日本語に変えると自動的にかわるのですよね。
今までは...そう、今までは

実際今やってみると、全然変わらない。英語のまま。全く変わらない。

ググっていると...

どうやら言語設定の扱いが変わったようですね。。

まとめると、
今までは端末の言語設定によって切り替わっていたけどそこに完全に依存しなくなった。
アプリ側のローカライズでちゃんと日本語の設定がされているかどうか...ここが重要。
端末で日本語になっていたとしても、アプリ側では英語の言語設定しかされていなかったら、英語になると。。

ちなみに、iOSを10向けにしてもこの事象は変わらないので、Xcode9からそういう扱いになったのだろうなと。

ということで、日本語にするには...
アプリ側でもローカライズすることが重要になってきます。
今回のサンプルで言うと、対象のstoryboardをちゃんとローカライズしてあげると...

ja

変わります。

これは何もUIToolbarに限った話ではなく、システムの言語設定に合わせて自動で切り替わっていたもの全てに影響しそうです。
実際、UIDatePickerなんかもモロに影響を受けてました...

でもなー。
ユーザが端末設定で変えてる言語に対応できるなら、勝手にやっちゃうほうがなんか良い気がするのだけれど。。🤔
アプリの意志 > ユーザの意思 っていうのがなんか...うーん。

ってことで、めんどくさがってデフォのen設定のままでやってるとこういうのに巡り合うのでお気をつけを(笑)