11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[iOS 9]あれ?日本語の表示が出ないぞ...そういう時にチェックするNSLocale周りの実装について

Last updated at Posted at 2015-11-24

はじめに

自作アプリの改修時に気付いた。
なんか英語の設定ばかりひいてるなーって。
NSLocale の取得値が iOS 9 から変わったらしい。
見事に else を通ってました。以下備忘録。

[[NSLocale preferredLanguages] objectAtIndex:0] の値

ユーザが使用している現在の表示言語を NSLocale で取得できる。
言語ごとに表示を変えたいときなどに使用する。下記のようになる。

Objective-C
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];

この値が,iOS 8 までは, "ja""en" だったのだが,
iOS 9 からは, "ja-JP""en-JP"
など地域の情報も込みになっている。

つまり言語情報をもとに場合分けしていた場合 else に抜けてしまう。

Objective-C
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];

if ([language isEqualToString:@"ja"]) {
	// 日本語の処理
	// iOS 9 はここを通らない
} else {
	// 英語の処理
}

それを防ぐために

Objective-C
// 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" 英語&赤

やっぱ曜日赤字の方がバランスいいですよね〜

calendar.png

おわりに

今回は,iOS 9 から取得値が変わった NSLocale について書きました。
"ja-JP" だけで済ますのかも少しパターンを考慮するのか難しいところ。
もっといい言語情報の取得方法があるかもしれない。
もっとこうした方がいいとか,こういうのもあるよー的なものがありましたら
コメントでご教授いただきたいです。よろしくお願いいたします!!

ご覧いただきありがとうございました!!

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?