読者です 読者をやめる 読者になる 読者になる

CA MOBILE エンジニアブログ

株式会社シーエー・モバイルのエンジニアブログです

iOS 9 でアプリ内のローカライズがうまくいかなくなりました。

こんにちは。ono です。

当社では iOS 9 がリリースされたことで、以前 Xcode 6 で開発してリリースしていたアプリにおいてローカライズの言語を間違える事象が発生しました。
今回はその事象と対策についてまとめます。

起きていた事象

iPhone の言語設定が日本語のユーザなのにアプリ上では英語にローカライズされてしまう部分がある。

ローカライズを間違えたコード

既存のソースコードを確認してみると、この部分が誤作動していました

NSArray *languages = [NSLocale preferredLanguages];  
NSString *currentLanguage = [languages objectAtIndex:0];  
if ([currentLanguage isEqualToString:@"ja"] == YES) {  
  // 日本語  
}  
else{  
  // 日本語以外  
}  

ローカライズ間違いの原因

[NSLocale preferredLanguages] の返り値が iOS 9 では ja のみではなく、
ja-jp など地域設定が追加されたため、"ja" と一致で判定すると失敗するようです。

この事象iOS シミュレータの言語設定、地域設定を変更することでも再現できます。

対策

[currentLanguage hasPrefix:@"ja-"] の条件を追加することで jaの地域設定に対応することができました。

if ([currentLanguage isEqualToString:@"ja"] == YES || [currentLanguage hasPrefix:@"ja-"])

参考

iOS9で日本語のLocalizable.stringが適用されない - Qiita

次回は Xcode 6 で開発したアプリのソースコードXcode 7 に移行した時のお話をします。