【Swift 3】端末の表示言語を読み取り、言語ごとに分岐する方法まとめ【iOS】

Pocket
LINEで送る

今回は端末内の言語設定を読み取り、アプリ内で言語ごとに処理を分ける方法について紹介します。例えば、各言語ごとに異なるコンテンツを表示させたり、処理を分岐させることができますね。

私が開発する街歩き型音声ガイドアプリ『Pokke』も、ユーザーの端末の言語設定を読み取り、各言語ごとにコンテンツの配信や表示を変えています。人によっては、母国語以外の言語をスマートフォンに設定している人もいるので、アプリの形式によってはアプリダウンロード後に使用言語を選んでもらうという方が良い場合もあります。

どうやればいいかコードだけ見たいという方は、目次から『5. まとめ』の部分だけご覧ください。

 

1. 端末の設定言語を優先順序で受け取る(配列)

lang_setting

現在、僕の端末設定言語の優先順位は「日本語 ⇒ 英語 ⇒ドイツ語」の順序で設定しています。なので、下記の関数をビルドすると、端末の設定言語が優先順序で配列として受け取ることができます。

それでは、端末で使用している(一番上の表示言語)を取得するにはどうすればいいでしょうか?

 

2. 端末の表示言語を受け取る

シンプルに、上記のメソッドに続き「.first」を書けば、端末の表示言語を取得することができます。

しかし、ここで一つの問題があります。それは、端末の地域によって、『ja-JPのオレンジ色の部分が異なるということです。僕は地域を日本に設定しているので、『JP』と表示されています。つまり、表示言語が日本語でも地域によって文字列が変わってきますので、純粋な文字列の比較はできません。

 

3. hasPrefix:接頭が一致する文字列を比較する

そこで、上記のように文字列の接頭を比較する『HasPrefix』を使用します。詳しくはこちらの記事をご覧ください。ビルドすると、イメージ通りの分岐ができていると思います。

 

4. 注意点

日本語や英語の場合は大丈夫だと思いますが、例えばワロン語(wa)をこの方法で判別しようとすると、ワライ語(war)やウォライタ語(wal)も引っ掛かってしまうので他の方法にしないといけません。その場合、条件式を追加で書かなければいけないので、ご自身のアプリに合わせて設計・実装をして下さい。

 

5. まとめ

端末の表示言語を取得する。

接頭一致を判断する『hasPrefix』を使い、言語ごとに処理を分岐する。

以上です。ありがとうございました!
疑問点や他の良い方法もあるよ!という方はコメントもしくはコンタクトから連絡下さいませ!

 

 

1990年生まれ、山梨県出身。サンフランシスコ州立大学国際政治経済学部卒。サンフランシスコでは、デザイン会社にて、インターンを経験したことから、テクノロジーと起業に興味を持つ。その後、日本に帰国しIT系商社に入社。サンフランシスコやイスラエルテック系スタートアップの日本市場へのローカライズ業務に従事。1年3ヶ月の勤務を経て退職、プログラミングを学び、音声ツアーガイドアプリ「Pokke」を開発・運営。

Leave a Comment