【问题标题】:Loading a localized pathForResource works on iOS simulator, but fails on device加载本地化 pathForResource 在 iOS 模拟器上工作,但在设备上失败
【发布时间】:2015-12-14 15:07:23
【问题描述】:

我正在尝试从 iOS 9 中的 mainBundle 加载本地化 HTML 文件。本地化文件都名为“help.html”,位于“de.lproj”和“en.lproj”目录中,分别。

如果我在模拟器 (iOS 9.2) 上运行此代码 sn-p,它会返回正确的 indexPath,但是当我在设备 (iOS 9.2) 上运行它时,它会返回 nil。

NSArray* availableLocalizations = [[NSBundle mainBundle] localizations];
NSArray* userPreferred = [NSBundle preferredLocalizationsFromArray:availableLocalizations forPreferences:[NSLocale preferredLanguages]];
NSString *indexPath = [[NSBundle mainBundle] pathForResource:@"help" ofType:@"html" inDirectory:nil forLocalization:[userPreferred objectAtIndex:0]];

我已经检查并确认这些文件存在于部署到设备的 app bundle 中,并且文件名(包括大写/小写)是正确的。

【问题讨论】:

    标签: ios localization ios-simulator nsbundle


    【解决方案1】:

    NSBundle preferredLocalizationsFromArray 的行为似乎从 iOS 8.4 更改为 9.0。

    示例:我选择“Austria”作为地区,选择“German”作为语言。

    • iOS 8.4 仅返回一个首选本地化“de”。
    • iOS 9.0 返回两个 - “de_AT”和“de”。

    对于“de_AT”,NSBundle pathForResource 找不到“de”本地化,返回 nil。

    修复了这个(理想情况下是不必要的)解决方法:

    NSArray* availableLocalizations = [[NSBundle mainBundle] localizations];
    NSArray* userPreferred = [NSBundle preferredLocalizationsFromArray:availableLocalizations forPreferences:[NSLocale preferredLanguages]];
    
    NSString *indexPath;
    for (NSString *locale in userPreferred) {
        indexPath = [[NSBundle mainBundle] pathForResource:@"hilfe" ofType:@"html" inDirectory:nil forLocalization:locale];
        if (indexPath) break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多