強火で進め

このブログではプログラム関連の記事を中心に書いてます。

iPhoneの言語設定関連の情報取得についての解説

iPhoneの「言語」設定は「言語」と「書式」の2つの設定項目があり、ちょっと複雑なので情報の整理と取得方法についての解説をまとめてみました。

現在設定されている「言語」を表示

    NSArray *languages = [NSLocale preferredLanguages];
    NSLog(@"preferredLanguages : %@", languages);
    NSString *currentLanguage = [languages objectAtIndex:0];
    NSLog(@"currentLanguage: %@", currentLanguage);

iPhoneの設定とそのときの結果は以下の様になります。

言語 currentLanguageの結果
日本語 ja
English en
简体中文 zh-Hans

preferredLanguagesの結果を見ると以下のルールが存在する様です。
1. 選択した言語が先頭に移動する
2. 英語(en)以外が選択されたとき、英語は2番目
3. 並び順は維持され、他の言語が選択された場合、その他の言語の並びはそれぞれ1つ後ろへずれる(英語については例外で 2. の挙動を取る)

このルールが有るため简体中文(zh-Hans)を選択した後に日本語(ja)に戻すと以下の様になります。

preferredLanguages : (
    ja,
    en,
    "zh-Hans",
    fr,
    "zh-Hant",
    de,
    nl,
    it,
    es,
    "pt-PT",
    da,
    fi,
    nb,
    sv,
    ko,
    ru,
    pl,
    pt,
    tr,
    uk
)

また、このルールにより以下の先頭のデータを取得することにより現在選択されている「言語」が取得できることが分かるかと思います。

        NSString *currentLanguage = [languages objectAtIndex:0];

ISOコードを取得

ISO 639-1などのISOコードを取得するには以下の様に記述します。

    NSLog(@"(1) currentLocale NSLocaleIdentifier : %@",[[NSLocale currentLocale] objectForKey:NSLocaleIdentifier]);
    NSLog(@"(2) currentLocale NSLocaleLanguageCode : %@",[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]);
    NSLog(@"(3) currentLocale NSLocaleCountryCode : %@",[[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]);

(1)〜(3)で返されるデータは以下となります。

(1) 言語 + 国、地域
(2) 言語
(3) 国、地域

iPhoneの設定とそのときの結果は以下の様になります。

言語 書式 言語 + 国、地域 言語 国、地域
日本語 日本 ja_JP ja JP
日本語 英語 (アメリカ合衆国) en_US en US
日本語 英語 (イギリス) en_GB en GB
English Japanese (Japan) ja_JP ja JP
English United States en_US en US
English United Kingdom en_GB en GB

結果を見ると「書式」の設定のみが反映されていることが確認できます。

「言語」と「書式」

「言語」と「書式」はそれぞれ以下の様な部分に反映されている様です。

言語 アプリのタイトル名。ローカライズのときに使用する Japanese.lproj や English.lproj の選択。
書式 日付、時刻、電話番号の書式(※iPhoneSafariのブックマーク「iPhoneユーザガイド」に記載あり)。

(2010/07/04 追記)
琴織 さらささんのサイト「Second Flush」にて各種デバイスで選択可能な言語コードと言語の対応表などの紹介をされています。

Second Flush:言語環境の言語
http://blog.livedoor.jp/second_flush/archives/51081171.html

関連サイト

(2010/08/24 追記)

ロケールから国名を日本語で取得 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20100823/1282584425

NSLocale Class Reference
http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSLocale_Class/Reference/Reference.html

Localizing iPhone Apps - Internationalization - iPhone SDK Articles
http://www.iphonesdkarticles.com/2008/11/localizing-iphone-apps.html

Locales Programming Guide: Working With Core Foundation Locales
http://developer.apple.com/iphone/library/documentation/CoreFoundation/Conceptual/CFLocales/Articles/CFLocaleWorking.html

Technical Q&A QA1391: How can I determine the order of the languages set by the user in the Language tab of the International preference pane?
http://developer.apple.com/qa/qa2006/qa1391.html