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 の選択。 |
---|---|
書式 | 日付、時刻、電話番号の書式(※iPhoneのSafariのブックマーク「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