はじめに
自作アプリの改修時に気付いた。
なんか英語の設定ばかりひいてるなーって。
NSLocale の取得値が iOS 9 から変わったらしい。
見事に else を通ってました。以下備忘録。
[[NSLocale preferredLanguages] objectAtIndex:0] の値
ユーザが使用している現在の表示言語を NSLocale で取得できる。
言語ごとに表示を変えたいときなどに使用する。下記のようになる。
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
この値が,iOS 8 までは, "ja" や "en" だったのだが,
iOS 9 からは, "ja-JP" や "en-JP"
など地域の情報も込みになっている。
つまり言語情報をもとに場合分けしていた場合 else に抜けてしまう。
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([language isEqualToString:@"ja"]) {
// 日本語の処理
// iOS 9 はここを通らない
} else {
// 英語の処理
}
それを防ぐために
// iOS 9 以上
if ([Util isIOS9Over]) {
if ([language isEqualToString:@"ja-JP"] ||
[language isEqualToString:@"ja-US"] ||
[language isEqualToString:@"ja-GB"]) {
// どこまで条件に入れるか・・・
// 日本語の処理
} else {
// 英語の処理
}
} else {
// iOS 9 未満
if ([language isEqualToString:@"ja"]) {
// 日本語の処理
} else {
// 英語の処理
}
}
みたいな感じで書くといいのかな。
直書きはあれなんでもちろん定数にしておくのが好ましい。
ちなみに,日本語環境でも他地域を選択している方もいることだろう。
カレンダーの曜日を赤くするためなど。私みたいに曜日を英語に,
さらに赤文字にするための設定をしてるユーザもいるかもしれない。
日本語,英語周りだとこの辺くらい見ておけば十分でしょうか。
3 つ以外は else で英語で逃がすとか?
言語 | 地域 | 表示 | カレンダーの曜日 |
---|---|---|---|
日本語 | 日本 | "ja-JP" | 漢字&黒 |
日本語 | アメリカ | "ja-US" | 漢字&赤 |
日本語 | イギリス | "ja-GB" | 漢字&赤 |
英語 | 日本 | "en-JP" | 英語&黒 |
英語 | アメリカ | "en-US" | 英語&赤 |
英語 | イギリス | "en-GB" | 英語&赤 |
やっぱ曜日赤字の方がバランスいいですよね〜
おわりに
今回は,iOS 9 から取得値が変わった NSLocale について書きました。
"ja-JP" だけで済ますのかも少しパターンを考慮するのか難しいところ。
もっといい言語情報の取得方法があるかもしれない。
もっとこうした方がいいとか,こういうのもあるよー的なものがありましたら
コメントでご教授いただきたいです。よろしくお願いいたします!!
ご覧いただきありがとうございました!!