🤖

AppleLanguagesを上書きする弊害

2021/12/29に公開

先に結論

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を切り替える方法に変更。

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

Discussion