根据官方文件Internationalization Programming Topics:
如果你的Mac应用程序有针对美国,英国的本地化, 和澳大利亚用户一样,捆绑例程会搜索相应的 区域目录(en_US.lproj,en_GB.lproj或en_AU.lproj)首先, 然后是en.lproj目录。 相同的应用程序 iPhone只能在en.lproj目录中查找。
但是我尝试将我的Localizable.strings放在en_US.lproj目录中,不是 en.lproj,我仍然可以使用NSLocalizedString()
函数找到英文字符串。
有什么问题?
答案 0 :(得分:2)
我不确定,但这是我受过教育的猜测。
首先要认识到OS X和iOS共享大量代码。实际上,您可以找到一些官方 OS X的功能 - 这些功能实际上也适用于iOS。
这是我在手机上观察到的内容:
如果我只有
- en_US.lproj
- Localizable.strings
然后,它将读取该文件中的值,与您发现的文档相矛盾(如您所述)。
但是,如果我有:
- en_US.lproj
- Localizable.strings
- en.lproj
- Localizable.strings
然后,它将从 en.lproj ,那种中获取值,尊重文档的精神。
现在,当我以图形方式使用Xcode时,它只会让我选择en-US
的本地化,不与en_US
(美国地区)相同。所以,我猜你(像我一样)走出Xcode,手动添加en_US.lproj
目录,然后将其添加到你的Xcode项目中。
也许Apple的想法是虽然iOS仍然可以识别en_US.lproj
,因为他们已经将Xcode配置为不允许您直接创建本地化,应用程序将无法在那里结束?所以,你已经破解了你的方式(那种)。
还有一点需要注意:如果你按照我的方式做了,并且手动创建了.lproj文件夹,你必须要小心,当你在Xcode之外更改它们时,当你认为它们时它们真的消失了。此外,您可能必须卸载您的应用程序,以此方式吹走您添加(和已删除)的旧.lproj目录。所以,这是另一种看待奇怪行为的方式。
长话短说,凭借文档,我不会向App Store提交具有此类本地化的应用程序。它可能会被拒绝,或者在将来中断(找不到字符串值),因为iOS上没有正式支持它。也就是说,如果这个功能无限期地继续工作,我也不会感到惊讶。