我使用以下方法从文本文件加载不同语言的文本资源:
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创建的这些文件夹通过连字符分隔语言和国家,但根据文档,它应该是下划线。我试图手动将文件夹(带下划线)复制到项目中,但它仍然不起作用。
如何设置加载特定国家/地区的文件?
感谢.....
答案 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>"; };
就是这样,现在我可以正确地设置这些语言了。