2

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

[[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] 正是我想要的 :)

4

1 回答 1

0

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

NSArray *arrayOfLanguages = [NSArray arrayWithArray:[NSUserDefaults arrayForKey:@"AppleLanguages"]];

希望这可以帮助!

于 2012-06-20T12:38:52.130 回答