我正在尝试从iOS 9中的mainBundle
加载本地化的HTML文件。本地化文件都命名为" help.html",位于" de .LPROJ"和" en.lproj"目录,分别。
如果我在模拟器(iOS 9.2)上运行此代码段,它将返回正确的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]];
我已经检查并确认文件存在于部署到设备的应用包中,并且文件名(包括大写/小写)是正确的。
答案 0 :(得分:0)
似乎NSBundle preferredLocalizationsFromArray
的行为已从iOS 8.4更改为9.0。
示例:我选择了"奥地利"作为地区,"德国"作为语言。
对于" de_AT",NSBundle pathForResource
找不到" de"本地化,并返回零。
修复此问题(理想情况下不必要)解决方法:
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;
}