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继续无限期地工作,也不会感到惊讶。