iOS localization is broken with the upgrade iOs 9 + Xcode 7
Asked Answered
B

4

7

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
https://static.mcmap.net/file/mcmap/ZG-Ab5ovKRkQZV0nc79QWRft/xc20yjj.png1

And of the device used for testing
https://static.mcmap.net/file/mcmap/ZG-Ab5ovKRkQZV0nc79QWRft/QCjn52u.png

Thanks in advance

Bookkeeping answered 22/9, 2015 at 7:31 Comment(4)
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?Sheers
The Application Language is settled to the System Language. Everything seems ok in fact I don't know where to look atBookkeeping
Looks like English has 4 files localised, but Italian only has 2–could that be the reason? Which files are localised in your project?Sheers
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 stringsBookkeeping
B
9

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.

Bookkeeping answered 23/9, 2015 at 6:59 Comment(6)
I met the same problem. But I change the value to 'Unite States' did not help. My 2nd language is Chinese Traditional.Cleanthes
However, if I change the 'Region' setting of the iOS device to 'Unite States', I can see Chinese on my app then. Why does the 'Region' setting matter?Cleanthes
Your base strings file is in english or in chinese?Bookkeeping
My base string file is in englishCleanthes
I'm sorry but I can't help, this is a very strange behaviorBookkeeping
I checked the return value of [NSLocale preferredLanguages], it shows 3 objects.. 'zh-TW', 'en-TW', 'zh-Hans-TW'. The first one supposed to be 'zh-Hant-TW'. It will return 'zh-Hant' in iOS 8.x. My device language is Traditional Chinese', and my region is 'Taiwan'Cleanthes
C
2

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

Cleanthes answered 12/11, 2015 at 13:33 Comment(1)
This worked for me. Project-Info-Localization and info.plist-Localization was different in my case.Columelliform
C
1

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!!

Cleanthes answered 4/11, 2015 at 14:52 Comment(1)
Note that I cannot find a way to add a localized resource with code "zh-TW", I can only add "zh", "zh-Hant" or "zh-Hant-TW" only. Not sure if it is a bug of apple.Cleanthes
E
0

So I found out you have add the languages you want the app to support. You have to manually select it to localization.

Encompass answered 2/4, 2023 at 10:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.