我们可能需要使用
的结果加载nib[NSBundle -pathForResource:ofType:inDirectory:forLocalization:]
我认为这是可能的,但我能找到的所有方法只是希望名称不能引导路径信息。
我们正在探索一种通过一个代码库提供fr-Fr和fr-CA的方法。我们的客户想要一个fr-CA翻译,我们担心我们可能会有另一个想要翻译fr-Fr的客户。我以为我们可以根据所选择的语言纠正笔尖。
由于
答案 0 :(得分:3)
路径查找会考虑用户的区域设置首选项。如果您提供了正确的本地化目录(.lproj
),系统应该加载正确的笔尖。
该方法首先在指定包的非本地化资源目录中查找匹配的资源文件。 (在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_CA
与fr_FR
的问题。
为此,让我们再看一下MobileSafari。它必须实现自己的智能查找,因为它有很多更精细的StaticBookmarks-xx_YY.plist
文件。
所以,这就是解决方案:使用仍然可用的语言环境功能,并相应地进行自己的查找。
答案 1 :(得分:2)
我不明白这个问题。 你可以完全拥有两种不同的NIB,分别用于法国和加拿大(法语),因为Xcode支持它。
只需为您的文件添加新的本地化:
然后使用视图控制器使用initWithNibName
方法加载NIB。将使用正确的一个,具体取决于设备语言设置。