我使用以下语句更改应用程序语言(独立于系统语言):
[[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 似乎无法实现这一点。然而,CFPreferences 可以解决问题:
CFPropertyListRef propertyList = CFPreferencesCopyValue(CFSTR("AppleLanguages"),
kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
NSArray *appleLanguages = (__bridge_transfer NSArray*)propertyList;
appleLanguages 现在包含最初为用户定义的语言列表。而 appleLanguages[0] 正是我想要的 :)