我们正在开发一个足球应用程序(足球)。该应用程序只支持英语,但足球在世界各地有不同的含义。在美国/澳大利亚/日本/新西兰,他们用足球代替足球。我们希望根据设备上选择的语言确定显示名称。
我们想要实现的是,在美国/澳大利亚/日本/新西兰的展示名称是“足球”,而在世界其他地方,它应该是“足球”。
实现
在阅读了苹果的这文档后,我们认为我们可以有一个后备语言机制。所以我们实现了以下功能。
我们创建了一个名为InfoPlist.strings
的文件,它支持以下内容:
en-GB
en-US
en-AU
en-NZ
ja
InfoPlist.strings文件的构造如下:
恩格勃
CFBundleDisplayName = "Football";
CFBundleName = "Football";
恩-US/ AU / NZ / ja
CFBundleDisplayName = "Soccer";
CFBundleName = "Soccer";
项目结构
除此之外,我们将Info.plist中的Info.plist指定为en-GB
/ United Kingdom
。
我们还试图在Info.plist中添加以下内容,但没有运气:
<key>CFBundleDisplayName</key>
<string>$(PRODUCT_NAME)</string>
<key>LSHasLocalizedDisplayName</key>
<true/>
当您在设备上选择一种受支持的语言作为首选语言时,它可以正常工作。但是,当您选择一种不受支持的语言(即德语)时,它又回到了en-US
本地化。你能帮我们理解一下吗?
理论上,操作系统查找首选语言(在本例中是德语),发现它不受支持。在此之后,如果它支持的是基本语言(没有方言),它将使用该语言。在这种情况下也是不可用的。最后一步结束:
如果应用程序不支持用户的首选语言,iOS将选择与应用程序的开发区域(
CFBundleDevelopmentRegion
)匹配的语言。
在我们的例子中,我们将CFBundleDevelopmentRegion
定义为en-GB
/ United Kingdom
。
我们希望看到“足球”作为显示名称,但我们看到“足球”(en-US
本地化)。我们不明白。
希望你能帮助我们
发布于 2020-12-15 23:31:19
我在ios 14中也遇到了同样的问题,似乎是个bug,每当对特定的地区en-XX有明确的定义时,一般都不会使用。相反,字母顺序用于特定的顺序。
https://developer.apple.com/forums/thread/663628
为了解决这个问题,有一种特定的语言en-001,我将它添加到项目中,并用默认值填充这些值。因此,它总是用en-001定义来解决未定义的特定问题。
https://stackoverflow.com/questions/62037020
复制