Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从文件路径加载nib_Iphone_Ios_Localization - Fatal编程技术网

Iphone 从文件路径加载nib

Iphone 从文件路径加载nib,iphone,ios,localization,Iphone,Ios,Localization,我们可能需要使用 [NSBundle -pathForResource:ofType:inDirectory:forLocalization:] 我认为这是可能的,但我能找到的所有方法都只需要名称,而不需要前导路径信息 我们正在探索通过一个代码库同时提供fr和fr CA的方法。我们的客户需要fr CA翻译,我们担心我们可能会有另一个客户需要fr翻译。我在想,我们可以根据所选语言找到正确的nib路径 谢谢路径查找会考虑用户的区域设置首选项。如果您提供了正确的本地化目录(.lproj),则系统应加

我们可能需要使用

[NSBundle -pathForResource:ofType:inDirectory:forLocalization:]
我认为这是可能的,但我能找到的所有方法都只需要名称,而不需要前导路径信息

我们正在探索通过一个代码库同时提供fr和fr CA的方法。我们的客户需要fr CA翻译,我们担心我们可能会有另一个客户需要fr翻译。我在想,我们可以根据所选语言找到正确的nib路径


谢谢

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

Per:

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

不幸的是,苹果的文档自相矛盾且不完整。如果您查看“国际化和编程主题”一节中的“语言和区域设置名称”,您将在“语言和区域设置ID”下找到以下内容:

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

这并不完全正确。如果你看看苹果自己的应用程序,你会发现iOS确实支持一些地区名称,但只支持苹果关心的地区名称。例如,请参见最近的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\u-CA
fr\u-fr
之间的问题

为此,让我们再看看MobileSafari。它必须实现自己的智能查找,因为它有大量更精细区分的
StaticBookmarks-xx_YY.plist
文件


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

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

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


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

感谢您的回复。但ios将查找具有区域的语言目录。从appl文档中可以看出:在iOS中,在查找本地化资源时,捆绑包接口不考虑方言或脚本信息;只考虑语言指示符代码。因此,如果项目包含具有语言和区域标识符的特定于语言的项目目录,则这些目录将被忽略。Mac OS X中的捆绑接口确实支持特定于语言的项目目录中的区域指示符。上面的注释应该是这样的:ios不会查看具有区域指示符的语言目录。感谢您的响应,但apple文档声明ios将忽略包含区域指示符的语言目录。这就是我看到的,如果我添加一个语言目录fr CA并将手机设置为法语,我没有法语笔尖。请提供相关文档的链接,或引用足够的唯一逐字文本,我可以自己搜索文档。感谢Jeremy的详细回答。嘿,Jeremy,还有一个问题。我们怎么能查到笔尖?我可以从特定目录加载nib吗?如果您将某一语言的nib打包到嵌套在应用程序包中的包中,您可以提供该包以及nib名称,并让框架运行查找。然后,您的工作将是确定使用哪个捆绑包作为所有NIB的基本位置。另一种可能是使用
+[UINib-nibWithData:bundle:][/code>加载NIB。至于执行查找,如果
NSBundle
妨碍了您,您始终可以获取主捆绑包的
bundleURL
,并使用
NSFileManager
的方法检查与应用程序打包的文件。