我需要使用我的应用程序分发包含html文件和图像的目录。
该应用程序支持不同的语言。我为每种语言创建了一个目录,然后根据当前的语言环境选择正确的目录:
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *path = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:[language stringByAppendingPathExtension:@"html"];];
if (![[NSFileManager defaultManager] fileExistsAtPath:path])
{
// Fallback to english
path = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:@"en.html"];
}
我怎样才能更好地处理这个而不必做上述事情(这有点乱)?
我想也许会以某种方式使用xx.lproj
目录并在每个xx.lproj目录中放置一个本地化的html 目录并使用NSBundle pathForResource
来查找正确的文件。但是无法让它工作。
答案 0 :(得分:6)
将xx.lproj
文件夹与[NSBundle pathForResource:ofType:]
一起使用非常简单。
您可以将index.html
添加到Xcode的项目文件中,然后通过其“获取信息”窗口将其设置为可本地化。添加“de”之类的其他语言,Xcode会将index.html
复制到新创建的de.lproj
中。如果您删除该文件,该应用程序将退回英文版。
您可以使用日志记录进行测试:
NSLog([[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]);
答案 1 :(得分:3)
我也无法让它发挥作用:
NSLog([[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]);
但是这样做,使用标准的Xcode language.lproj结构(例如,en.lproj):
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index"
ofType:@"html"
inDirectory:[language stringByAppendingPathExtension:@"lproj"]];
也删除了额外的;在上面马丁的原始问题中......
答案 2 :(得分:3)
额外提示:确保删除构建产品中文件的未本地化版本,否则pathForResource将找到这些文件而不是本地化文件。
答案 3 :(得分:1)
为什么不forLocalization
方式:
htmlFile = [[NSBundle mainBundle] pathForResource:@"myContent"
ofType:@"html"
inDirectory:@"de.lproj"
forLocalization:@"de"];
这适用于Xcode 5.1.1和iOS 7.1
添加@Martin Wickman的概括(带有后备),一切都应该很棒。
答案 4 :(得分:0)
你可以用这个:
NSString *filename = [NSString stringWithFormat:@"html_%@.html", NSLocalizedString(@"abbr", @"")];