2

When I change my language in iPhone settings it isn't reflected in NSLocale.current.language.

Is this because my app does not support Spanish? I would expect it to be reflected regardless. Ultimately I'm trying to get the ISO 639-1 (2-digit) region code for the users preferred language.

Code:

guard var preferredLanguage = NSLocale.preferredLanguages.first else { return }

for language in NSLocale.preferredLanguages {
    print("preferredLanguage: \(language)")
}

print("languageCode: \(NSLocale.current.languageCode)")
print("regionCode: \(NSLocale.current.regionCode)")

Output:

preferredLanguage: es-US
preferredLanguage: haw-US
preferredLanguage: en-US
languageCode: Optional("en")
regionCode: Optional("US")
Jeremiah
  • 1,471
  • 1
  • 13
  • 22
  • I'm not clear on what you're asking. From the output I see your preferred language is "es-US". What did you change it to? – Ashley Mills Apr 24 '18 at 15:02

1 Answers1

3

Since iOS 11, NSLocale.current can only return languages supported by your app.

More info can be found here:

https://stackoverflow.com/a/47678964/173623

https://jaanus.com/ios-11-changes-localized-date-handling/

thedp
  • 8,350
  • 16
  • 53
  • 95