🤖
AppleLanguagesを上書きする弊害
先に結論
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()
とかやると、countryCode
はUS
を返すようになった。
でも、設定アプリで地域とかを変更しても変更した値が取得できない。
色んなタイミングでremoveObjectForKey
で消してみたんだけど改善せず。
結局、言語に応じてLocalizable.strings
を切り替える方法に変更。
まぁ、安易にシステム側から設定される値を上書きするべきではないですね(笑)
Discussion