iOS アプリの言語設定をコードで変える

調べてる途中で必要なくなって中途半端な感じだけど備忘録的な。

システムの言語設定とかが UserDefaults に渡されて、NSLocalizedString とかはそれを見て返す言語を変えてるらしかった。 以下のように言語とかロケール系の設定を上書きすると、次回起動時から上書きした設定が使用される。 3つ上書きしてるけど、最低限どれを変えれば良いのかとかは調べてない。 userDefaults.synchronize() した後に NSLocalizedString 読んでも上書き前のものが返ってきてた。

let userDefaults = UserDefaults.standard
let identifier = "ja-JP"
userDefaults.set([identifier], forKey: "AppleLanguages")
userDefaults.set([identifier], forKey: "NSLanguages")
userDefaults.set(identifier, forKey: "AppleLocale")
userDefaults.synchronize()

参考

GitHub - trailblazr/LocaleOverrider: Demonstrator how to override the apps locale in case you need to provide fast Locale switching.