iOS9で、[NSLocale preferredLanguages]から返却される
日本語のコードが 「ja」から「ja-JP」や「ja-US」などに変更された。
これはiOS9から言語コードに地域コードも含める形になったからだ。
そのため「isEqualToString:@"ja"」と判定する処理が想定通り動かなくなった。
この現象はiOS8→iOS9にアップデートしたユーザーにも影響はあるが、設定→一般→言語と地域で地域コードを変更しないかぎりはそれまでの"ja"として返却される模様。
アップデートした上で地域の設定をしたユーザーや、iOS9にしてから端末のリセットで初期設定をしたユーザー。そして6Sを購入したユーザーで問題が発生する。
対策としては「isEqualToString:@"ja"」と"ja"だったら日本と判定しているのが問題なので、「"ja"から始まる文字列なら」と変更するのも手。
ただ、今後どんな変更があるかわからないのでローカライズファイルを使った言語判定をお勧めしたい。
方法は簡単。
XCodeでローカライズを使用すると生成される言語ファイル。
Localizable.strings(English)
Localizable.strings(Japanese)
Localizable.strings(Korean)
その中に日本(Localizable.strings(Japanese))なら
"languageCode" = "ja";
英語(Localizable.strings(English))なら
"languageCode" = "en";
と定義しておく。
あとはUtilクラスに判定用関数を用意してあげればOK。
+ (BOOL) isLanguageJP {
if ( [@"ja" isEqualToString: NSLocalizedString(@"languageCode", nil) ) {
return YES;
}else{
return NO;
}
}
これだと言語の割り振り自体はローカライズとしてOSに任せる事ができるので、言語コードがどう変わっても対応できます。
[0回]
PR
COMMENT