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

未应用iOS应用程序默认语言“en”,ios,xcode,localization,Ios,Xcode,Localization,在Xcode 4.6.3中,我将本地化本地开发区域设置为en 我为我的应用程序提供西班牙语、英语和俄语语言环境 不幸的是,我将Iphone模拟器的语言设置为德语 我的应用程序使用西班牙语语言环境 我怀疑是因为我有一台西班牙电脑 但我希望我的应用程序的客户能够获得英语,如果他们的语言环境不是由应用程序提供的 我如何确保这一点 我注意到一件事。在“复制捆绑资源”选项卡中,我看到其他可本地化的.strings文件显示为红色。但是我知道它们正在被部署…我的一个应用程序也有同样的问题。我所做的是把英语作为

在Xcode 4.6.3中,我将本地化本地开发区域设置为en

我为我的应用程序提供西班牙语、英语和俄语语言环境

不幸的是,我将Iphone模拟器的语言设置为德语 我的应用程序使用西班牙语语言环境

我怀疑是因为我有一台西班牙电脑

但我希望我的应用程序的客户能够获得英语,如果他们的语言环境不是由应用程序提供的

我如何确保这一点


我注意到一件事。在“复制捆绑资源”选项卡中,我看到其他可本地化的.strings文件显示为红色。但是我知道它们正在被部署…

我的一个应用程序也有同样的问题。我所做的是把英语作为AppleLanguages的第二语言,现在已经开始使用了。您必须在应用程序启动之前执行此操作。这是一个有点丑陋的黑客行为,但目前仍然有效。NSLocalizedString正在查看该列表以确定语言。。。不过,你必须小心,因为这样做之后,你可能会从NSLocale得到一些奇怪的东西。例如,如果您想使用-displayNameForKey:value:它将不同步,您必须重新启动应用程序才能获得正确的结果。因此,您可以使用[NSLocale preferredLanguages]NSLocale*currentLocale=[NSLocale alloc]initWithLocaleIdentifier:[NSLocale preferredLanguages][0]中的第一个元素初始化NSLocale;然后它将返回预期的结果

以下是交换语言所需的操作:

// 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。尽管对于葡萄牙语地区来说,英语是更可取的语言,但还是会选择ru,因为在下面的屏幕截图上,它在设备设置上高于英语


我认为这句话的价值应该是英语而不是英语。你是对的,我用英语更新了应用程序,但仍然没有运气!嗯,我有点害怕使用这个黑客。您是否解释了为什么IOS没有选择本地化本地开发区域中给出的正确语言环境。我使用en值,因为文件夹名为en.lprojI,我不知道为什么它不使用默认的回退。。。从某种程度上说,我不知道他们是什么时候开始使用的,后备语言只是preferredLanguages数组中的第二种语言。。。这就是为什么我从一开始就开始使用这种黑客。根据文档,这实际上是默认行为——如果你的列表中有de和es作为后备,那么应用程序将以es显示。如果你不支持es,那么它将以en显示,这是软件开发过程中使用的本地化。不,我指的是你从中获得的数组的顺序[NSLocale首选语言]。在手机的设置应用程序中的顺序相同。这就是为什么如果选择德语,然后选择波兰语,则翻译为德语。如果选择英语,请更改手机的语言,然后将其更改为波兰语,并且假设您有en.lproj,则您的应用程序将翻译为英语而不是德语,但如果您选择ect德语和波兰语之后,你的应用程序将被翻译成德语而不是英语。我已经在我的主.m文件上尝试过了,但不起作用。第一次我发现它在第二次发布后没有被转换,它在运行tank@Pavel Osipov,你为我节省了很多时间