本地化的应用程序名称与界面语言不匹配

alb*_*amg 9 localization ios

我遇到了这个问题,主屏幕中的应用程序名称显示错误的语言.仅当应用程序不支持用户的首选语言时才会发生这种情况.我已经在Xcode 8和iOS 10中使用模拟器和真实设备中的多个项目对此进行了测试.

如果应用程序不支持用户的首选语言,则使用应用程序的开发区域(CFBundleDevelopmentRegion)显示界面语言,如本文档中所述.到现在为止还挺好.但是,主屏幕中的应用程序名称不符合此标准,它似乎.lproj按字母顺序选择英语或第一个文件夹(如果英语不存在).

假设我的应用支持以下语言:

在此输入图像描述

我的设备设置如下所示:

在此输入图像描述

以下声明:

[NSLocale preferredLanguages]
Run Code Online (Sandbox Code Playgroud)

返回预期结果:

<__NSArrayM 0x79da6b30>(
en
)
Run Code Online (Sandbox Code Playgroud)

而这另一个声明:

[[NSBundle mainBundle] preferredLocalizations]
Run Code Online (Sandbox Code Playgroud)

也返回预期的结果:

<__NSArrayM 0x79716630>(
zh
)
Run Code Online (Sandbox Code Playgroud)

但是,主屏幕中的应用程序名称使用了错误的本地化:

在此输入图像描述

我错过了什么吗?有没有人遇到过这个问题?

重现步骤:

  1. 创建一个新的iOS项目.
  2. 转到项目设置 - >信息 - >本地化并添加第二种语言,例如日语.
  3. 将CFBundleDisplayName添加到Info.plist文件中.
  4. 将CFBundleDevelopmentRegion更改为zh_CN.
  5. 创建新的InfoPlist.strings文件.在"检查器"选项卡的"本地化"下,单击"本地化..."按钮.选择将其从下拉列表移动到中文lproj文件夹.
  6. 在"检查器"选项卡的"本地化"下,选中"日语"复选框.
  7. 编辑InfoPlist.strings文件并添加"CFBundleDisplayName"="中文"; 或"CFBundleDisplayName"="日语"; 分别.
  8. 在模拟器或真实设备中运行应用程序,其语言和区域设置设置为与中文或日语不同的内容,例如英语和美国

预期成绩:

用户界面和应用程序名称应以应用程序开发语言显示(示例中为中文).

观察结果:

用户界面以应用程序开发语言(示例中为中文)显示,而应用程序名称以日语显示.

Sve*_*ker 2

首先,这是一个典型的问题,包含很多细节,是重现您的问题的良好指南;)

分析

此行为似乎是从 iOS 10 开始的错误。我无法在 iOS9.3 上重现它,其中显示了预期的捆绑包显示名称“中文”。iOS 11 Beta 4 似乎也有这个 bug。您应该向 Apple 提交错误(请参阅他们的BugReporter

我已经使用 Xcode8.3.3 和 iOS 10.3 SDK 构建的应用程序测试了所有这些。

解决方法

作为一个简单的解决方法,您可以将 Info.plist 中的 CFBundleDisplayName 设置为 DevelepmentRegion-Language(“中文”)的本地化值,该值将充当默认值。