2011-08-17 140 views
2

我们可能需要加载使用的负载笔尖

[NSBundle -pathForResource:ofType:inDirectory:forLocalization:] 

我认为这是有可能的结果的笔尖,但所有我能找到的方法只有所需的名称不会导致路径信息。

我们正在探索一种通过一个代码库提供fr-Fr和fr-CA的方法。我们的客户想要一个fr-CA翻译,我们害怕我们可能会有另一个客户想要fr-Fr翻译。我想我们可以根据选定的语言来修正笔尖。

谢谢

回答

3

路径查找考虑到用户的区域设置首选项。如果您提供了正确的本地化目录(.lproj),则应该由系统加载正确的笔尖。

Apple's documentation

的方法首先查找指定包的非本地化资源目录匹配的资源文件。 (在Mac OS X中,此目录通常称为资源,但在iOS中,它是主包目录。)如果未找到匹配的资源文件,它将查找任何可用的语言特定“.lproj”的顶级目录。 (特定于语言的目录的搜索顺序与用户的首选项相对应。)它不通过其他任何位置的子目录进行递归。有关更多详情,请参阅国际化编程主题。

不幸的是,苹果的文档是自相矛盾和不完整的。

重要:如果你看一下“国际化编程主题”中的“语言和区域设置名称”,你会“语言和区域设置ID”这个宝石下找到在iOS中,捆绑接口不在查找本地化资源时考虑方言或脚本信息;只考虑语言指示符代码。因此,如果您的项目包含具有语言和区域指示符的特定于语言的项目目录,则会忽略这些目录。 Mac OS X中的软件包接口在语言特定的项目目录中支持区域指示符。

这不完全正确。如果你看看苹果自己的应用程序,你会看到iOS确实支持某些区域名称,但只有Apple关心的那些。例如见.LPROJ目录列表在最近的移动Safari浏览器:

$ ls -d *.lproj 
Dutch.lproj/ el.lproj/  pt_PT.lproj/ 
English.lproj/ en_GB.lproj/ ro.lproj/ 
French.lproj/ fi.lproj/  ru.lproj/ 
German.lproj/ he.lproj/  sk.lproj/ 
Italian.lproj/ hr.lproj/  sv.lproj/ 
Japanese.lproj/ hu.lproj/  th.lproj/ 
Spanish.lproj/ id.lproj/  tr.lproj/ 
ar.lproj/  ko.lproj/  uk.lproj/ 
ca.lproj/  no.lproj/  vi.lproj/ 
cs.lproj/  pl.lproj/  zh_CN.lproj/ 
da.lproj/  pt.lproj/  zh_TW.lproj/ 

注意,两名中国区,一个英式英语区和葡萄牙葡萄牙地区的支持。但是这些都不能解决fr_CAfr_FR的问题。

为此,我们再来看看MobileSafari。它必须执行自己的智能查找,因为它有更多的更精细的区别StaticBookmarks-xx_YY.plist文件。

所以,这就是解决方案:使用仍然可用的区域设置功能,并相应地进行自己的查找。

+0

感谢您的响应,但苹果文档声明ios将忽略包含区域指示符的语言目录。这就是我所看到的,如果我添加一个语言目录fr-CA并将我的手机设置为法语我不会得到法语笔尖。 –

+0

请提供相关文档的链接,或引用足够的独特逐字文本,以便我可以自行搜索文档。 –

+0

感谢Jeremy的详细回复。 –

2

我不明白这个问题。 由于Xcode支持,您可以完美拥有法国和加拿大(法语)两种不同的NIB。

只需添加新的定位为您的文件(S):

enter image description here

然后用视图控制器加载NIB,与initWithNibName方法。根据设备的语言设置,将使用正确的一个。

+0

感谢您的回复。但是ios会查看有区域的语言目录。来自appl文档重要提示:在iOS中,捆绑接口在查找本地化资源时不会考虑方言或脚本信息;只考虑语言指示符代码。因此,如果您的项目包含具有语言和区域指示符的特定于语言的项目目录,则会忽略这些目录。 Mac OS X中的软件包接口在语言特定的项目目录中支持区域指示符。 –

+0

上面的评论应该读取ios不会看看有区域指示符的语言目录。 –