我使用以下语句来更改应用程序语言(独立于系统语言):
[[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]正是我想要的:)
答案 0 :(得分:0)
您将de
语言设置为index:0处的对象:[NSArrray arrayWithObjects: @"de", @"en", nil]
。当您检查首选语言是什么时,您只检查第一语言是什么(索引0处的语言),但是其他索引也有语言(您将“en”设置为索引1):{{1 }}。假设您想将首选语言存储在数组中;你可以这样做:
[[NSLocale preferredLanguages]objectAtIndex:0];
希望这有帮助!