LoginSignup
4
3

More than 5 years have passed since last update.

AppleLanguagesを上書きする弊害

Posted at

先に結論

AppleLanguagesを上書きしたら、NSLocaleCountryCodeの結果がnilになってしまった。

(この値を使う事がないならば、AppleLanguagesを上書きしてしまってもいいかもしれないが…)

経緯

アプリ内で言語変更を実装する必要があって調べてみたら

AppleLanguagesを使う方法が見つかった。

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(["en"], forKey: "AppleLanguages")
defaults.synchronize()

という感じのコードをapplicationDidFinishLaunchingとかに書いておくと、確かに指定した言語に変更する事ができた。

でも、こいつの影響で

let countryCode = NSLocale.currentLocale().objectForKey(NSLocaleCountryCode)

の結果が、nilになってしまった。

NSUserDefaultsの中身を見ているとAppleLocaleという物もあって、こいつをいじればいいのかなぁと思って、

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(["en"], forKey: "AppleLanguages")
defaults.setObject("en-US", forKey: "AppleLocale")
userDefault.synchronize()

とかやると、countryCodeUSを返すようになった。

でも、設定アプリで地域とかを変更しても変更した値が取得できない。

色んなタイミングでremoveObjectForKeyで消してみたんだけど改善せず。

結局、言語に応じてLocalizable.stringsを切り替える方法に変更。

まぁ、安易にシステム側から設定される値を上書きするべきではないですね(笑)

4
3
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
4
3