Alamofire: Akzeptieren-Sprache-Header sind für einige Sprach-/Regionskombinationen falsch

Erstellt am 7. Apr. 2017  ·  3Kommentare  ·  Quelle: Alamofire/Alamofire

Alamofire generiert Accept-Language Header mit der preferredLanguages Eigenschaft von Locale , die eine Kombination aus Sprache und Region ist.

Dies funktioniert gut für Standardkombinationen: en-US , fr-FR , fr-CA ...

Wenn der Benutzer jedoch eine Sprache auswählt, die nicht zur Region passt, erhalten wir eine Kombination, die nicht als Accept-Language .

Nehmen Sie beispielsweise ein Gerät, das mit der folgenden Kombination konfiguriert ist:

  • Sprache: Französisch
  • Region: Vereinigte Staaten

Das erste preferredLanguages ist dann fr-US , was keine echte Sprache darstellt (es gibt keine spezielle Version der französischen Sprache, die in den USA verwendet wird).

Somit enthält das generierte Accept-Language einen Wert, der in vielen Fällen nicht erkannt wird. Hier ist eine Liste gültiger Codes .

Auf einem Gerät in Frankreich/USA generiert Alamofire die folgenden Accept-Language : fr-US;q=1.0, en-US;q=0.9
Es wird von dieser PHP-Funktion , die versucht, das beste verfügbare Gebietsschema herauszufinden, nicht richtig erkannt. Es wird en anstelle von fr .

Im Gegensatz dazu stellt Safari iOS sicher, dass ein gültiges Accept-Language :

Auf einem Gerät in Frankreich/USA lautet das gesendete Accept-Language fr-fr . (Hier finden Sie eine schnelle Möglichkeit , die von einem Browser gesendeten HTTP-Header zu kennen).

Im Idealfall sollte Alamofire die gleichen Accept-Language wie Safari generieren.

  • Xcode-Version: 8.2.1
  • iOS-Version: iOS 10
http headers question

Hilfreichster Kommentar

Hallo @simonliotier ,

Vielen Dank für Ihren ausführlichen Bericht hier ... sehr geschätzt. Was wir alle bedenken müssen, ist, dass Ihr Anwendungsfall zwar nicht fr-US erhalten möchte, andere jedoch möglicherweise. Sie können fr-US auf der Serverseite immer in fr-FR umwandeln, um eine korrekte Zuordnung vorzunehmen, aber Sie würden nie wissen, wie Sie fr-FR in das Gebietsschema des Benutzers umkehren können auf den fr-US .

Alamofire legt standardmäßig nur Accept-Language , aber Sie können es gerne für Ihren speziellen Anwendungsfall überschreiben. Ich glaube nicht, dass es richtig wäre, wenn wir versuchen, das Gebietsschema des Benutzers allgemeiner zu gestalten.

Danke schön. 🍻

Alle 3 Kommentare

Danke für den Bericht! Ich kann jedoch in RFC 7231 keine Dokumentation finden, die diese Kombinationen offiziell angibt. Können Sie uns auf welche hinweisen? Andernfalls müssen wir wahrscheinlich eine statische Karte von möglichen Kombinationen mit akzeptablen erstellen, was wir wahrscheinlich nicht tun möchten.

Ich finde auch keine offizielle Liste. Ich denke, Safari hat seine eigene Liste akzeptabler Kombinationen. 😕

Hallo @simonliotier ,

Vielen Dank für Ihren ausführlichen Bericht hier ... sehr geschätzt. Was wir alle bedenken müssen, ist, dass Ihr Anwendungsfall zwar nicht fr-US erhalten möchte, andere jedoch möglicherweise. Sie können fr-US auf der Serverseite immer in fr-FR umwandeln, um eine korrekte Zuordnung vorzunehmen, aber Sie würden nie wissen, wie Sie fr-FR in das Gebietsschema des Benutzers umkehren können auf den fr-US .

Alamofire legt standardmäßig nur Accept-Language , aber Sie können es gerne für Ihren speziellen Anwendungsfall überschreiben. Ich glaube nicht, dass es richtig wäre, wenn wir versuchen, das Gebietsschema des Benutzers allgemeiner zu gestalten.

Danke schön. 🍻

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen