草庐IT

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

coder 2023-07-30 原文

我遇到了这个问题,主屏幕中的应用程序名称以错误的语言显示。只有当应用程序不支持用户的首选语言时,才会发生这种情况。我已经在模拟器和真实设备中使用多个项目在 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 文件。在检查器选项卡中,在本地化下单击“本地化...”按钮。从下拉列表中选择将其移动到 Chinese lproj 文件夹。
  6. 在“检查器”选项卡中,选中“本地化”下的“日语”复选框。
  7. 编辑 InfoPlist.strings 文件并添加 "CFBundleDisplayName"= "Chinese";或“CFBundleDisplayName”=“日语”;分别。
  8. 在模拟器或真实设备中运行应用程序,并将其语言和区域设置设置为不同于中文或日语的内容,例如英语和美国

预期结果:

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

观察到的结果:

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

最佳答案

首先,这是一个包含大量细节的示例性问题,也是重现问题的良好指南;)

分析

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

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

解决方法

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

关于ios - 本地化应用程序名称与界面语言不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315257/

有关ios - 本地化应用程序名称与界面语言不匹配的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  3. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  4. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  5. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  6. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

随机推荐