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:
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.
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. 🍻
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önnenfr-US
auf der Serverseite immer infr-FR
umwandeln, um eine korrekte Zuordnung vorzunehmen, aber Sie würden nie wissen, wie Siefr-FR
in das Gebietsschema des Benutzers umkehren können auf denfr-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. 🍻