iOS 本地化因升级而中断 iOs 9 + Xcode 7

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

我使用 Localizable.strings 文件和 NSLocalizedString macro 将我的应用本地化为意大利语和英语。我还启用了 base localization。在模拟器和 iOS 8 的设备上一切正常,但在 iOS 9 上,应用程序始终为英语,即使在 iPhone 设置中选择意大利语作为默认语言的设备上也是如此. iOS 9 是否通过本地化改变了什么?

这是 Xcode 本地化设置的屏幕截图
1

以及用于测试的设备

提前致谢

已解决,"problem" 是 info.plist 文件中的键 "Localization native development region"。它被设置为意大利,因此当应用程序在默认使用意大利语的设备中 运行 时,它会显示字符串的基本本地化版本(英语版本)。 将值更改为美国解决了问题。

我找到了解决方法。 这个问题的根本原因是Apple在iOS 9中更改了"Language Identifiers",请参考this

由于 NSLocalizedString()(及其变体)访问 NSUserDefaults 中的 "AppleLanguages" 键以确定用户对首选语言的设置。一旦我发现他们的语言 ID 是新格式,我就强迫 NSLocalizedString 使用一种特定的语言,并在旧 iOS 版本中将其标记为旧语言标识符。也就是说,我做了一个"AppleLanguages"键值的映射。

具体操作请参考:How to force NSLocalizedString to use a specific language

我觉得苹果在兼容性方面做得很差!!

我有另一个解决方案,只需删除 info.plist 中的密钥 'Localizations' 即可。 它适用于我的情况。