Ich bin gerade dabei, eine iPhone-App zu internationalisieren. Ich muss programmgesteuerte Änderungen an bestimmten Ansichten vornehmen, basierend auf dem aktuellen Gebietsschema des Benutzers. Ich werde verrückt, weil unabhängig von der Spracheinstellung auf dem iPhone-Simulator oder der tatsächlichen Hardware locale
immer "en_US" ausgewertet wird:
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Das Verrückte ist, dass sich der Rest der Anwendung wie erwartet verhält. Die richtigen Zeichenfolgen werden aus der Datei Localization.strings ausgewählt und in der Benutzeroberfläche verwendet, und die richtigen .xib-Dateien für das ausgewählte Gebietsschema werden verwendet.
Ich habe auch Folgendes versucht, ohne Erfolg und mit dem gleichen Ergebnis:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Gibt es etwas Einfaches, das mir fehlt? Eine Präferenz oder ein Import vielleicht?
Was ich früher gemacht habe:
Wie Darrens Antwort andeutet, ist die Präferenz, nach der ich suche, nicht in NSLocale
, sondern hier:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Peters Antwort scheint eine bessere Lösung zu sein:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);