【Swift】Localeの使い方

Localeは、言語と地域を組み合わせたロケール情報を保持する構造体です。
日付や時間、金額、数値等の書式の決定に影響します。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】11.4
【Swift】5.2
【iOS】13.4
【macOS】Catalina バージョン 10.15.4

Locale識別子

Locale構造体は言語と地域に関するいくつかのプロパティを持ちますが、その中で最も重要なのがロケール識別子(Locale.identifier)です。
Locale識別子は、言語(Language)と地域(Region)を組み合わせたString型の文字列です。

【Locale識別子の例】
en_US(英語+米国地域)
ja_JP(日本語+日本地域)
en_JP(英語+日本地域)
Fr_FR(フランス語+フランス地域)

「言語」+「地域」の基本形だけでなく、「言語」のみや、「字体」「方言」などが付く例外もあります。

Localeと書式の関係

Localeが決まると、日付・時間の表記、小数点、桁区切り文字、通貨記号などの書式が自動的に決まります。
いくつか例を示します。

en_US(英語、米国地域)
en_US(英語、米国)

ja_JP(日本語、日本地域)
ja_JP(日本語、日本)

ja_US(日本語、米国地域)
ja_US(日本語、米国)

en_JP(英語、日本地域)
en_JP(英語、日本)

fr_FR(フランス語、フランス地域)
fr_FR(フランス語、フランス)

de_DE(ドイツ語、ドイツ地域)
de_DE(ドイツ語、ドイツ)

zh_CN(中国語、中国地域)
zh_CN(中国語、中国)

en_US_POSIX

言語や地域による書式は、現時点の文化や習慣によって定められていますが、将来変更される可能性があります。
en_US_POSIX はAppleにより将来的に書式が変わらないと保証されている特別なLocale識別子です。
en_US_POSIX

現時点ではen_USと書式が同じですが、将来en_USの書式が変わったとしても、en_US_POSIXは変わりません。

また、このLocale識別子を使うと、端末のカレンダー設定を無視して常に西暦として処理してくれるので、和暦と西暦の違いで年の解釈が変わりません。
ユーザーの端末設定により処理に影響を及ぼしたくない場合に有効です。

iPhone端末でのロケール情報変更方法

iPhone端末のロケール情報は、「設定」→「一般」→「言語と地域」で確認できます。
「iPhoneの使用言語」と「地域」の変更で端末のロケール情報を変更可能です。

iPhone端末でのロケール情報変更方法

現在のLocale情報の取得

現在のLocale構造体およびLocale識別子の取得方法は次の通りです。

注意点として、ここで取得したLocale情報は必ずしも端末のロケール情報とイコールではありません。
地域(Region)は端末の情報が取得されますが、言語(Language)についてはそのアプリが対応しているローカライズ言語と、端末の「使用する言語の優先順位」の中で一致する最上位の言語が採用される仕組みです。

Xcodeで新規作成したプロジェクトでは、通常ローカライズ言語に登録されているのはEnglishのみですので、端末のロケール設定を「日本語」+「日本地域」にしても、アプリ側で取得できるLocale情報は”en_JP”となります。

アプリのローカライズ言語に言語を追加する方法

対象のアプリをXcodeで開き、図に示した順番でクリックしていくと、そのアプリのローカライズ言語(Localizations)が参照できます。

④で+(プラス)をクリックして表示されるリストの中から、追加したい言語を選択します。
Localozationの追加

こちらが、Japanese(日本語)を追加した状態です。
japaneseを追加した状態

この状態でコンパイルしたアプリを、ロケール設定「日本語」+「日本地域」に設定した端末で動かすと、取得されるLocale設定情報が”ja_JP”となります。

Locale構造体の生成

Locale構造体は、イニシャライザで特定のロケール識別子を指定して生成します。
生成したLocale構造体は、アプリ上の書式決定の為の使用を目的としており、端末自体のLocale設定は変更できません。

なお、次の方法で、指定可能な全てのLocale識別子一覧を取得可能です。

あわせて読みたい記事

【Swift】日付と時間を扱うクラス/構造体まとめ
Swiftでは日付と時間を扱う為にクラスや構造体がいくつか用意されており、組み合わせて使用します。本記事ではそれらのクラス/構造体を紹介します。
【Swift】Dateの使い方
Dateはカレンダーやタイムゾーンに依存しない「特定の時点」を示す構造体です。単体で日時の比較や、時間間隔の計算等が可能ですが、夏時間、閏年、うるう秒、暦法(ユリウス暦やグレゴレオ歴等)等は考慮されませんので、正確に算出する為にはCal...
【Swift】Calendarの使い方
Calenderは主に日付と時間の計算を行う際に使用する構造体です。
【Swift】TimeZoneの使い方
TimeZoneはタイムゾーン(標準時間帯)情報を保持する構造体です。タイムゾーンはある地域での標準時間を表す指標で、GMT(グリニッジ標準時)との時差で表します。日本の標準時間である日本標準時(JST)はGMT+9時間で定義されていま...
【Swift】DateFormatterの使い方
日付と時間の書式を定義するクラスです。Date構造体←→テキストの相互変換に使います。