如何找到本地化目录的路径?

时间:2011-05-04 08:55:35

标签: iphone ios localization

我需要使用我的应用程序分发包含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来查找正确的文件。但是无法让它工作。

5 个答案:

答案 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", @"")];