iOS应用程序默认语言“en”未应用

在Xcode 4.6.3中我设置了“Localization native development region”= en。

我为我的应用程序提供西class牙语,英语和俄语语言环境。

不幸的是,当我将Iphone模拟器的语言设置为例如“德语”时,我的应用程序使用西class牙语语言环境。

我怀疑是因为我有一台“西class牙语电脑”。

但是如果应用程序没有提供他们的语言环境,我希望我的应用程序的客户获得英语。

我怎样才能确保这一点?

有一点我注意到了。 在“复制包资源”选项卡中,我看到我的其他Localizable.strings文件显示为红色。 但我知道他们正在尽管红色部署……

我的一个应用程序遇到了同样的问题。 我所做的是强迫en作为AppleLanguages的第二语言,它现在正在运作。 您必须在应用程序启动之前(主要)执行此操作。 这是一个丑陋的黑客,但现在工作(NSLocalizedString正在查看该列表以确定语言)…你必须要小心,因为你可能会从NSLocale得到一些奇怪的东西后,你这样做。 例如,如果您想使用 – displayNameForKey:值:它将不会同步,您将不得不重新启动应用程序,以便获得正确的结果。 所以你可以做的是使用[NSLocale preferredLanguages]中的第一个元素初始化NSLocale(NSLocale * currentLocale = [[NSLocale alloc] initWithLocaleIdentifier:[NSLocale preferredLanguages] [0]];)然后它将返回预期的结果。

以下是交换语言所需要做的事情:

// remove what was previously stored in NSUserDefaults (otherwise the previously selected language will be still the first one in the list and your app won't be localized in the language selected in settings) [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize]; // make the change immediate // reorder the languages so English is always the default fallback NSMutableArray *mutableLanguages = [[NSLocale preferredLanguages] mutableCopy]; NSInteger enIndex = NSNotFound; for (NSString *lang in mutableLanguages) { if ([lang isEqualToString:@"en"]) { enIndex = [mutableLanguages indexOfObject:lang]; break; } } @try { if ((enIndex != 0) && (enIndex != 1)) { [mutableLanguages exchangeObjectAtIndex:1 withObjectAtIndex:enIndex]; } } @catch (NSException *exception) { } // save the changes [[NSUserDefaults standardUserDefaults] setObject:mutableLanguages forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize]; // to make the change immediate return UIApplicationMain(argc, argv, nil, NSStringFromClass([YourAppDelegate class])); 

应用程序具有的实际语言具有动态特性,因为它取决于设备设置中的动态列表。 iOS将通过它落实并选择第一种支持的语言。

让我们考虑一些应用程序支持“en”和“ru”。 尽管“en”对于葡萄牙语语言环境来说是更优选的语言,但选择“ru”是因为它在下面的屏幕截图中的设备设置中位于高于“en”的位置。

在此处输入图像描述