无法加载特定于国家/地区的资源

时间:2012-04-22 14:06:51

标签: iphone ios5 localization

我使用以下方法从文本文件加载不同语言的文本资源:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"];

if(filePath) {

    NSString *myText = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

}

与我的英语,德语等语言特定资源配合得非常好。

但我也有一些特定国家的资源,如英国的英文文本,美国的英文文本,奥地利的德文等。

如果手机设置为特定国家(地区格式),我希望能够加载这些资源,但他们没有。文件路径将始终设置为“纯”语言文件夹中的文件。

所以例如我在文件夹中有myfile.txt:

en.lproj
en-GB.lproj
en-US.lproj

但它总是加载en.lproj中的那个

使用Xcode中的本地化功能创建了文件夹,这些文件夹都位于同一文件夹中。

有点奇怪的是,Xcode创建的这些文件夹通过连字符分隔语言和国家,但根据文档,它应该是下划线。我试图手动将文件夹(带下划线)复制到项目中,但它仍然不起作用。

如何设置加载特定国家/地区的文件?

感谢.....

3 个答案:

答案 0 :(得分:3)

我创建了Localisations.string的“荷兰 - 荷兰”翻译并将iPhone语言设置为荷兰语,但NSLocalizedString总是返回英文翻译。解决方案是创建一个“荷兰语”翻译(nl.lproj)而不是“dutch-netherlands”(nl-NL.lproj)。

在iOS4或iOS5的设置屏幕中,您可以选择荷兰语,但荷兰语 - 荷兰语或荷兰语 - 比利时语没有子选择,即使这些语言在XCode中可用。在我看来,XCode提供的翻译选项比iOS实际支持的更多。

我的意思是没有办法让你的应用使用“nl-NL”资源。我想同样的问题适用于德国和奥地利(“de-DE”和“de-AT”)。

答案 1 :(得分:0)

注意:您的代码示例是一种加载文本资源的复杂方法。如果要加载非字符串资源(如图像或媒体文件),这很好,但对于简单的字符串,每种语言只使用一个.strings文件(包含多个本地化字符串)并调用NSLocalizedString来更容易获取给定字符串的相关语言版本。

答案:“区域格式”下的iOS设置不会影响资源加载。相反,它控制系统如何执行与语言环境相关的功能(例如日期/数字格式化和解析)。控制本地化资源的哪种语言版本加载的iOS设置是语言设置(常规>国际>语言)。目前,它只包括两种英语变体:“英语”和“英国英语”。

答案 2 :(得分:0)

我对nl-NL.lproj(Netherland)和ca-ES.lproj(加泰罗尼亚语)也有同样的问题。我的解决方案是使用Xcode添加语言。转到Xcode项目,然后在信息选项卡中添加langugages。自动创建文件夹nl-NL.lproj和ca-ES.lproj。

然后你可以在模拟器(Xcode版本4.6)上尝试这个,这些语言不会说,而是加载英语。

首先将文件夹nl-NL.lproj手动重命名为nl.lproj。 最后转到{MY_PROJECT} .xcodeproj / project.pbxproj文件并替换以下行的PATH:

    C3D2888817108DDA00CE8AC2 /* nl-NL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nl-NL"; path = "nl.lproj/Localizable.strings"; sourceTree = "<group>"; };
    C3D2888917108DE500CE8AC2 /* nl-NL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nl-NL"; path = "nl.lproj/InfoPlist.strings"; sourceTree = "<group>"; };

就是这样,现在我可以正确地设置这些语言了。