ObjecTips

Swift & Objective-C で iOS とか macOS とか

中国語のローカライズ表記

iOS の言語設定の言語一覧画面と同じような画面を作ろうと思って実装してみたら中国語の場合に思い通りにいかなかったメモ

iOS の言語設定の言語一覧画面

f:id:Koze:20160302105041p:plain

cell.textLabel.title には現地語でのローカライズ表記
cell.detailTextLabel.title にはシステム言語でのローカライズ表記で言語が表示されている。

これらをとりあえず見えてる範囲で同じ表記になるよう実装してみる。
ロケールの identifier は以下のように場合によっては言語コード+国コードの形になっている。

コメント部分に記載した様におおよそ設定画面と同じように表示されている。*1
問題は中国語で、まず日本語表記では「簡体中文」「繁体中文」と表記されて欲しいところが「中文」のみが表示されている。
また現地語表記では「香港」が「中華人民共和国香港特別行政区」と表示されている。

試しにコードから取得できる中国語の全リストを洗ってみる。

香港とマカオは 中華人民共和国XXX特別行政区 と付与されるらしい。
これをシステム設定の表記に合わせるには、直接 displayNameForKey: メソッドを呼ばずに1つクッションをかまして特定の NSLocaleIdentifier の時には自前で用意したローカライズ文字列を返す様にしてやる事で対応できる。
また「中文」の表記の部分についても同様に、システム設定の表記に合わせるには特定の NSLocaleLanguageCode の時には自前のローカライズ文字列を返す様にする事で対応できる。 *2

*1:フランス語とスペイン語の文頭の大文字小文字が異なっているのと、フランス語(カナダ)の括弧の表記が無い点が異なっている

*2:労力的にシステム設定と同じ表記になる様に何語までチェックし実装対応するかという問題はある。なるべくなら例外処理なしでAPIローカライズできるのがベスト