2011年2月7日月曜日

[iOS] 現在の表示言語をNSLocaleで取得する


言語環境の設定で、現在どの言語が選択されているか取得するには、

NSArray *langs = [NSLocale preferredLanguages];


を使います。

NSLogで出力するとこうなります。

----
    ja,
    en,
    fr,
    de,
    nl,
    it,
    es,
    pt,
    "pt-PT",
    da,
    fi,
    nb,
    sv,
    ko,
    "zh-Hans",
    "zh-Hant",
    ru,
    pl,
    tr,
    uk,
    ar,
    hr,
    cs,
    el,
    he,
    ro,
    sk,
    th,
    id,
    ms,
    "en-GB",
    ca,
    hu,
    vi

 ----

右上の画像に表示されている言語順で、言語コードが表示されているようです。
選択した言語が一番上に表示されるので、現在設定されている言語は、配列要素の0番目になります。

あとは、この言語コードからNSLocaleを作成します。


NSString *langID = [langs objectAtIndex:0];

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:langID];



と簡単に作成できます。

これをどう使うかはいろいろとあると思うけど、
僕はやりたかったのは、日付書式の言語設定を表示言語に変えたかった!

日付書式:英語
表示言語:日本語

となってると、NSDateFormatterで得られる日付書式が英語になるんですね。
これが嫌で、表示言語に合わしたくて、さっきのNSLocaleをNSDateFormatterに適用するわけです。

適用するのも2行でおわり、かんたん〜♪


NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setLocale:locale];



ローカライズの機能を利用して、表示言語設定に応じて、日付書式を変えることもできる。
英語のとき、Feb. 2011 (書式:MMM. yyyy)
日本語のとき、2011年2月 (書式:yyyy年M月)

という風にもできる。

0 件のコメント:

コメントを投稿