从文件路径加载nib

时间:2011-08-17 23:23:13

标签: iphone ios localization

我们可能需要使用

的结果加载nib
[NSBundle -pathForResource:ofType:inDirectory:forLocalization:]

我认为这是可能的,但我能找到的所有方法只是希望名称不能引导路径信息。

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

由于

2 个答案:

答案 0 :(得分:3)

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

Apple's documentation

  

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

不幸的是,Apple的文档是自相矛盾且不完整的。如果您查看“国际化和编程主题”,“语言和区域设计指定”部分,您将在“语言和区域设置ID”下找到此宝石:

  

重要说明:在iOS中,捆绑接口在查找本地化资源时不会考虑方言或脚本信息;只考虑语言指示符代码。因此,如果您的项目包含具有语言和区域指示符的特定于语言的项目目录,则会忽略这些目录。 Mac OS X中的捆绑接口确实支持特定于语言的项目目录中的区域指示符。

这不完全正确。如果你看看Apple自己的应用程序,你会发现iOS确实支持某些地区的名称,但只支持Apple关注的地区。例如,参见最近的Mobile Safari中的.lproj目录列表:

$ 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文件。

所以,这就是解决方案:使用仍然可用的语言环境功能,并相应地进行自己的查找。

答案 1 :(得分:2)

我不明白这个问题。 你可以完全拥有两种不同的NIB,分别用于法国和加拿大(法语),因为Xcode支持它。

只需为您的文件添加新的本地化:

enter image description here

然后使用视图控制器使用initWithNibName方法加载NIB。将使用正确的一个,具体取决于设备语言设置。