iOS是否查找特定于地区的.lproj目录(例如en_US.lproj)?

根据官方文件国际化编程主题 :

如果您的Mac应用程序具有美国,英国和澳大利亚用户的本地化,则软件包例程将首先search相应的区域目录(en_US.lproj,en_GB.lproj或en_AU.lproj),然后searchen.lproj目录。 iPhone上的相同应用程序只能在en.lproj目录中看到。

但我试图把我Localizable.strings在en_US.lproj目录中, 而不是 en.lproj,我仍然可以通过使用NSLocalizedString()函数find英文string。

有什么问题?

我不确定,但这是我的教育猜测。

首先要认识到的是,OS X和iOS共享大量的代码。 实际上,你可以find很多官方 OS X的function,但实际上它们也可以在iOS上使用。

以下是我在手机上观察到的情况:

如果我只有

 - en_US.lproj - Localizable.strings 

然后,它会读取该文件中的值,与您发现的文档相矛盾(如您所注意的)。

但是,如果我有:

 - en_US.lproj - Localizable.strings - en.lproj - Localizable.strings 

那么,它会从en.lproj中获得价值尊重文档的精神。

现在,当我使用Xcode的时候,graphics上只会让我selecten-US的本地化,这跟en_US (美国地区)是一样的。 所以,我猜你(像我),去了Xcode之外,手动添加en_US.lproj目录,然后将其添加到您的Xcode项目。

也许苹果的想法是,虽然iOS仍然可以识别en_US.lproj ,因为他们已经configurationXcode不允许你直接创build本地化,应用程序不会在那里结束? 所以,你已经侵入了你的方式(种)到这个function。

还有一点需要注意的是,如果你像我一样做了,而且手动创build了.lproj文件夹,那么当你在Xcode之外改变它们的时候,你必须小心,如果你认为它们是真的的话。 此外,您可能需要卸载您的应用程序,以删除您以这种方式添加(和删除 )旧的.lproj目录。 所以,这是看到奇怪行为的另一种方式。

长话短说,就像现在的文档一样,我不会将这种types的本地化应用程序提交给App Store。 它可能会被拒绝,或者将来会中断(不会findstring值),因为它在iOS上没有正式的支持。 也就是说,如果这个function继续无限期地工作,也不会感到惊讶。