【问题标题】:Localized app name vs interface language mismatch本地化应用名称与界面语言不匹配
【发布时间】:2017-07-25 23:54:05
【问题描述】:

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

当应用不支持任何用户的首选语言时,界面语言将使用应用的开发区域 (CFBundleDevelopmentRegion) 显示,如this document 中所述。到目前为止,一切都很好。但是,主屏幕中的应用名称不支持这一点,它似乎按字母顺序选择英文或第一个 .lproj 文件夹(如果不存在英文)。

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

我的设备设置如下所示:

以下声明:

[NSLocale preferredLanguages]

返回预期结果:

<__NSArrayM 0x79da6b30>(
en
)

还有这句话:

[[NSBundle mainBundle] preferredLocalizations]

也返回预期的结果:

<__NSArrayM 0x79716630>(
zh
)

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

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

重现步骤:

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

预期结果:

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

观察结果:

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

【问题讨论】:

    标签: ios localization


    【解决方案1】:

    首先,这是一个典型的问题,有很多细节和一个很好的指南来重现你的问题;)

    分析

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

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

    解决方法

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

    【讨论】:

    • 首先,感谢您的关注。我很高兴听到其他人可以重现该问题。我已经提交了一个错误,但我不希望很快收到他们的消息。关于解决方法,我已经检查过 Info.plist 中的 CFBundleDisplayName 值没有使用。始终使用来自InfoPlist.strings 文件之一的值。
    • 好吧,这很奇怪。您使用的是哪种设置?我已经在 10.3.3 iPad 上使用 Xcode8.3.3 和 10.3 SDK 构建的应用程序测试了解决方法,该应用程序将英语设置为唯一的首选语言
    • 我也在使用 XCode 8.3.3 / 10.3 SDK。在我的实验中,我发现英语 InfoPlist.strings 值被选中而不是默认的 Info.plist 值。如果不存在英语,则使用 Info.plist 值。顺便说一句,我要把赏金奖励给你。
    • 啊,好吧,我在最近的实验中没有使用英文InfoPlist.strings。并感谢赏金;)我希望Apple可以认真调查此事。这只是一个边缘案例,但仍然是项目配置基础中的一个错误。
    • CFBundleDevelopmentRegion 似乎存在问题,如果应用程序不支持您的区域设置,iOS 如何处理选择区域设置。我的 iPad 设置为波兰语,我的应用程序的默认语言设置为英语,但该应用程序是意大利语的,当然因为我的 iPad 以前是意大利语的。我遇到了 Xcode 9A235 和 iOS 9.3.5 的问题。但是,iOS 11 和最新的 SDK 版本似乎解决了这个问题。我猜 Apple 不会在 iOS 9 和 10 上对此进行修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2018-12-08
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多