在 iOS 中找出实际本地化(相对于当前区域)?

Find out actual localization (as opposed to current region) in iOS?

假设我的应用支持英语和西班牙语本地化,包括 en.lproj/Localizable.stringses.lproj/Localizable.strings。还假设它在区域设置为德语的 iPhone 上运行。

在这种情况下,我想用英语(而不是德语)显示日期,以免产生部分英语(由于 en.lproj/Localizable.strings)和部分德语(由于所选区域)的用户界面因此可能包括 "mixed" 字符串,例如 "Weekend edition, Samstag, 10.1.".

那么我如何从 iOS 应用程序中以编程方式找出实际正在使用的本地化(例如,iPhone 区域设置为德国但应用程序所在位置的英语仅支持英语和西班牙语本地化)?

我发现以下方法可以完成这项工作(基于 this 相关问题中的线索):

NSArray *preferredLanguages = NSLocale.preferredLanguages;

NSString *actualLanguage = nil;
for (actualLanguage in preferredLanguages)
    if ([NSBundle.mainBundle pathForResource:actualLanguage ofType:@".lproj"] != nil)
        break;

if (actualLanguage == nil)
    actualLanguage = @"en"; // default