LoginSignup
39
38

More than 5 years have passed since last update.

iOSの言語設定に応じて設定されるNSLocaleの値について簡単にまとめてみる

Last updated at Posted at 2014-06-06

iOSの「設定」-> 「一般」-> 「言語環境」中の「言語」と「書式」に応じて、NSLocaleの設定値がどう変わるか忘れそうなのでメモ。

どういう目的に使われているのか確認する

同じような目的に使われているように思い込みがちですが、全く違う目的に使われています。

iPhone ユーザガイド iOS 7.1 ソフトウェア用 P.20から抜粋。

言語環境設定
「設定」 > 「一般」 > 「言語環境」と選択し、以下を設定します:
• iPhone で使用する言語
• 音声コントロールで使用する言語
• 使用するキーボード
• 書式(日付、時刻、および電話番号)
• カレンダーの書式

つまり、「言語」で設定した項目が、システム全体で使われる言語(日本語やアメリカ英語、イギリス英語...)として使用される。
「書式」で設定した項目は、日付や時刻のフォーマットを決定するのに使われます。
あと、「書式」はVoiceOverの読み上げの時にも使われるそうです。

NSLocaleの何に設定されるのか

「言語」は、NSLocaleのpreferredLanguageで取得したNSArrayの先頭の要素から取得できます。

preferredLanguageで取得したNSArrayには、IETF言語タグのBCP47で定義されたものが格納されています。
「言語」で指定したものが最初の要素に設定されているので、システムで使われている言語を確認したい場合は先頭の要素を使って確認してください。

NSString * countryCode = [[NSLocale preferredLanguages] objectAtIndex:0];

「書式」は、NSLocaleのsystemLocaleかcurrentLocaleで取得できます。
systemLocaleはシステム全体の「書式」を取得できますが、マルチユーザ環境で現在のユーザーの「書式」を取得したい場合は、currentLocaleが使えます。

NSString * locale = [[NSLocale currentLocale] objectForKey:NSLocaleIdentifier];

「言語」「書式」の設定とNSLocaleに設定される値

言語環境 書式 PreferredLanguage NSLocaleIdentifier
日本語 日本語 ja ja_JP
日本語 英語(アメリカ合衆国) ja en_US
英語(English) 英語(アメリカ合衆国) en en_US
英語(English) 英語(イギリス) en en_GB
英語(British English) 英語(アメリカ合衆国) en-GB en_US
英語(British English) 英語(イギリス) en-GB en_GB
ドイツ語 ドイツ de de_DE
フランス語 フランス en en_GB

おっかない所

「言語」はIETF言語タグに従って設定される

同じ言語だと思っていても、アメリカ英語とイギリス英語のように別な言語タグが定義されている場合があります。
事前に確認するくらいの勇気を持ちましょう。

言語と書式は別個に設定できる

「言語」と「書式」は別個に設定できるため、システムの言語は日本語でも日付や電話番号はアメリカ式の表記法で書かれてしまう場合があります。
取得した情報を何のために使うのか把握した上でどちらを使うか検討してみましょう。

言語は日本語を使うけど書式だけ入れ替えた例

言語環境 書式 システムで使われる言語 年月日 電話番号
日本語 日本語 日本語 2014年 1月 5日 日曜日 0:34 03 1234 1234
日本語 英語(アメリカ合衆国) 日本語 Sunday, January 5, 2014 12:34 AM (408)555-1212
日本語 英語(イギリス) 日本語 Sunday, January 5, 2014 00:34 07700 900202

参考

NSLocale Class Reference

39
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
38