7
votes

I localized my app in Italian and English, using the Localizable.strings file and the NSLocalizedString macro. I also enabled base localization. Everything works fine in the simulator and on devices with iOS 8, but on iOS 9 the app is always in english, even on devices with the italian language selected as default in the iPhone settings. Does iOS 9 changes something with localization?

Here's a screenshot of the Xcode localization settings
http://i.imgur.com/xc20yjj.png1

And of the device used for testing
http://i.imgur.com/QCjn52u.png

Thanks in advance

3
What language is your scheme running in? Select your app title in the breadcrumb in Xcode (next to the simulator selector) -> Edit Scheme... -> Run -> Options -> Application Language?wakachamo
The Application Language is settled to the System Language. Everything seems ok in fact I don't know where to look atLorenzOliveto
Looks like English has 4 files localised, but Italian only has 2–could that be the reason? Which files are localised in your project?wakachamo
I removed the english localization because it was a copy of the base but the app is still in english. I will investigate this strange problem in the next days. It seems that it ignores the default language in the settings and load the base stringsLorenzOliveto

3 Answers

9
votes

Solved, the "problem" was the key "Localization native development region" in the info.plist file. It was setted to Italy, so when the app was running in a device with the Italian language as default it was showing the Base localization version of the strings (the English version). Changing the value to United States solved the issue.

2
votes

I have another solution, just remove the key 'Localizations' in info.plist. It works for my case.

1
votes

I've found a workaround. The root cause of this problem is Apple changed the "Language Identifiers" in iOS 9, please refer this.

Since NSLocalizedString() (and variants thereof) access the "AppleLanguages" key in NSUserDefaults to determine what the user's settings for preferred languages are. I forced NSLocalizedString to use a specific language with is noted as their old Language Identifiers in older iOS versions once I found their Language ID is in new format. In another word, I made a mapping of "AppleLanguages" key value.

To do this, please refer to: How to force NSLocalizedString to use a specific language

I think Apple did a very bad job in compatibility!!