升级 iOs 9 + Xcode 7 破坏了 iOS 本地化

Posted

技术标签:

【中文标题】升级 iOs 9 + Xcode 7 破坏了 iOS 本地化【英文标题】:iOS localization is broken with the upgrade iOs 9 + Xcode 7 【发布时间】:2015-09-22 07:31:39 【问题描述】:

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

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

以及用于测试的设备

提前致谢

【问题讨论】:

您的方案使用什么语言运行?在 Xcode 的面包屑中选择您的应用程序标题(在模拟器选择器旁边)-> 编辑方案... -> 运行 -> 选项 -> 应用程序语言? 应用程序语言设置为系统语言。一切似乎都很好,其实我不知道在哪里看 看起来英语有 4 个本地化文件,但意大利语只有 2 个——这可能是原因吗?您的项目中本地化了哪些文件? 我删除了英文本地化,因为它是基础的副本,但应用程序仍然是英文的。我将在接下来的几天里调查这个奇怪的问题。它似乎忽略了设置中的默认语言并加载了基本字符串 【参考方案1】:

已解决,“问题”是 info.plist 文件中的关键“本地化原生开发区域”。它设置为意大利,因此当应用程序在默认使用意大利语的设备上运行时,它会显示字符串的基本本地化版本(英文版)。 将值更改为美国解决了这个问题。

【讨论】:

我遇到了同样的问题。但是我将值更改为“美国”并没有帮助。我的第二语言是繁体中文。 但是,如果我将 iOS 设备的“区域”设置更改为“美国”,那么我可以在我的应用程序上看到中文。为什么“区域”设置很重要? 您的基本字符串文件是英文还是中文? 我的基本字符串文件是英文的 对不起,我没办法,这是一个非常奇怪的行为【参考方案2】:

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

【讨论】:

这对我有用。 Project-Info-Localization 和 info.plist-Localization 在我的情况下是不同的。【参考方案3】:

我找到了解决方法。 这个问题的根本原因是Apple在iOS 9中更改了“语言标识符”,请参考this。

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

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

我认为苹果在兼容性方面做得很糟糕!

【讨论】:

请注意,我找不到使用代码“zh-TW”添加本地化资源的方法,我只能添加“zh”、“zh-Hant”或“zh-Hant-TW” .不知道是不是苹果的bug。

以上是关于升级 iOs 9 + Xcode 7 破坏了 iOS 本地化的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 7 for iOS 9 中 XPC 连接中断

iOS 9 xCode 7 构建的应用程序显示黑色矩形而不是初始屏幕

iOS 9 Xcode 7 - 应用程序在顶部和底部出现黑条

iOS 9 Xcode 7 - 应用程序在顶部和底部出现黑条

Xcode 7 / iOS 9:在 SKNode 中使用 OpenGL 片段着色器未编译

应用程序崩溃整个设备在Segue上为iOS 9 + Xcode 7