IOS:App-Language独立于设备而不更改NSUserDefaults

时间:2012-06-20 12:09:23

标签: ios localization nslocale

我使用以下语句来更改应用程序语言(独立于系统语言):

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", nil] forKey:@"AppleLanguages"];

在不同的情况下,我想获得系统语言。当我使用

[[NSLocale preferredLanguages] objectAtIndex:0]

结果是总是“de”。即使重新启动应用程序并且首先执行第二个语句。 这对我来说非常有意义,因为这是我刚用上面的代码行配置的。 但是,我想获得系统配置的实际系统语言。

理由: 应用程序应具有三种语言设置:英语,德语,系统语言。用户应该能够以英语运行应用程序,而系统的其余部分以德语运行,或者只使用标准系统语言设置。

我真的很感激这里有一些帮助:) 最好的祝福, 乔纳森


我终于找到了一个简单而强大的解决方案。最初的问题是

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", nil] forKey:@"AppleLanguages"];

返回之前配置的值。但这不是我想要的。我希望使用“全局”配置的语言(独立于菜单中使用的应用程序等)。 NSUserDefaults似乎无法实现这一点。然而,CFP参考可以解决问题:

CFPropertyListRef propertyList = CFPreferencesCopyValue(CFSTR("AppleLanguages"),
    kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
NSArray *appleLanguages = (__bridge_transfer NSArray*)propertyList;

appleLanguages现在包含最初为用户定义的语言列表。而appleLanguages [0]正是我想要的:)

1 个答案:

答案 0 :(得分:0)

您将de语言设置为index:0处的对象:[NSArrray arrayWithObjects: @"de", @"en", nil]。当您检查首选语言是什么时,您只检查第一语言是什么(索引0处的语言),但是其他索引也有语言(您将“en”设置为索引1):{{1 }}。假设您想将首选语言存储在数组中;你可以这样做:

[[NSLocale preferredLanguages]objectAtIndex:0];

希望这有帮助!