2017-12-06 3 views
1

von Ab iOS 11.0, der folgende Code gibt "de_US" statt "en_US":NSLocale in iOS falschen Wert zurückkehr 11

// => Returns "de_US" 
NSString *regionCode = [[NSLocale currentLocale] objectForKey:NSLocaleIdentifier]; 
NSLog(@"Region code: %@", regionCode); 

Unter iOS 11, es gibt "en_US".

Mein Gerät hat für Sprache und Region Englisch/USA. Bevorzugte Sprachen (trotz ich sie nicht in meinem Code verwenden) sind in der Reihenfolge:

  1. Englisch
  2. Deutsch
  3. Französisch

Ist es ein bekanntes Problem von iOS 11? Hat sich die API geändert?

+0

diese auf einem Gerät passieren tut oder im Simulator? Und außerdem: Die App hat eine englische Lokalisierung? – mschmidt

+0

Es passiert auf einem Gerät: iPhone 6 Plus. App hat nur eine Lokalisierung: "Localizable.strings" -Datei in Xcode Ziel. Die Werte sind in Deutsch in dieser Datei, aber ich habe keine deutsche Datei in Xcode angegeben. Ich frage mich, woher dieses "de_" kommt. – hico

Antwort

2

Es gefunden!

Es ist eine Verhaltensänderung von iOS beginnend 11.

Unter iOS 11, [NSLocale current] liefert nur von Ihrer App Lokalisierungen unterstützten Sprachen. Wenn Ihre App nur Englisch unterstützt (als Basislokalisierung), wird currentLocale unabhängig von der Sprache, die der Benutzer auf dem Gerät auswählt, immer Englisch zurückgeben.

Unter iOS 10 und früher würde currentLocale die von Ihnen ausgewählte Sprache und Region direkt repräsentieren, unabhängig davon, welche Lokalisierungen Ihre App unterstützt.

Weitere Informationen hier:

+0

Wenn diese Lokalisierungen gleich sind, dann schätze ich, dass deine Bewerbung sich ausschließlich um Angst, Kindergärten und Schadenfreude dreht? Witze beiseite, dokumentiert Apple immer noch ".current/-currentLocale" als eine Funktion nur der "Einstellungen für das gewählte Systemgebietsschema des aktuellen Benutzers, überlagert mit benutzerdefinierten Einstellungen, die der Benutzer angegeben hat", stellt aber fest, dass ein Gebietsschema "linguistisch, kulturell, und technologische Konventionen ", nicht nur eine Sprache. Verwenden Sie Kilometer, die 24-Stunden-Uhr, normale TT/MM/JJJJ-Datumsanzeige usw.? – Tommy

+0

Siehe https://stackoverflow.com/a/46206511/1226963 – rmaddy

+0

Bitte beachten Sie, dass wenn Sie Ihre deutschen und englischen Localizable.strings Dateien genau gleich sind, Sie sehr verärgert sein werden. Der App Store behauptet, dass Ihre App sowohl Deutsch als auch Englisch unterstützt. Da Sie jedoch nicht beide Strings-Dateien lokalisiert haben (Sie haben angegeben, dass sie identisch sind), werden sowohl deutsche als auch englischsprachige Benutzer sehen, welche Sprache Sie tatsächlich haben (ich kann nicht sagen, ob Sie beide Dateien auf Deutsch haben) oder Englisch). – rmaddy