Я использую следующий оператор для изменения языка приложения (независимо от языка системы):
[[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] — это как раз то, что я хотел :)