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

时间:2013-11-27 11:29:26

标签: ios xcode localization

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

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

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

我怀疑是因为我有一台“西班牙语计算机”。

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

我如何确保这一点?

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

2 个答案:

答案 0 :(得分:7)

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

让我们考虑一些应用支持" en"和" ru"。尽管如此," en"是更适合葡萄牙语语言环境的语言," ru"将被选中,因为它位于高于" en"在下面的屏幕截图中的设备设置中。

enter image description here

答案 1 :(得分:2)

我的一个应用程序遇到了同样的问题。我所做的是强迫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]));