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

时间:2017-07-25 23:54:05

标签: ios localization

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

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

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

enter image description here

我的设备设置如下:

enter image description here

以下声明:

[NSLocale preferredLanguages]

返回预期结果:

<__NSArrayM 0x79da6b30>(
en
)

另一个声明:

[[NSBundle mainBundle] preferredLocalizations]

也会返回预期结果:

<__NSArrayM 0x79716630>(
zh
)

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

enter image description here

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

重现的步骤:

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

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

    观察到的结果:

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

1 个答案:

答案 0 :(得分:2)

首先,这是一个示范性问题,包含大量细节和重新制作问题的良好指南;)

<强>分析

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

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

解决方法

作为一种简单的解决方法,您可以将Info.plist中的CFBundleDisplayName设置为DevelepmentRegion-Language(&#34; Chinese&#34;)的本地化值,该值将作为默认值。