0

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

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 创建的文件夹确实用连字符分隔语言和国家,但根据文档,它应该是一个下划线。我试图手动将文件夹(带下划线)复制到项目中,但它仍然不起作用。

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

谢谢.....

4

3 回答 3

3

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

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

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

于 2012-10-14T22:04:57.310 回答
0

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

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

于 2012-04-23T09:56:48.133 回答
0

我对 nl-NL.lproj(荷兰)和 ca-ES.lproj(加泰罗尼亚语)有同样的问题。我的解决方案是使用 Xcode 添加语言。转到 Xcode 项目,然后在 Info 选项卡中添加语言。将自动创建文件夹 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>"; };

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

于 2013-04-06T17:45:08.527 回答