Alamofire: Accept-Languageヘッダーは、一部の言語/地域の組み合わせでは正しくありません

作成日 2017年04月07日  ·  3コメント  ·  ソース: Alamofire/Alamofire

Alamofireは、言語と地域の組み合わせであるLocalepreferredLanguagesプロパティを使用して、 Accept-Languageヘッダーを生成します。

これは、標準の組み合わせでうまく機能します: en-USfr-FRfr-CA .. ..

ただし、ユーザーが地域に一致しない言語を選択した場合、 Accept-Languageとして使用できない組み合わせが得られます。

たとえば、次の組み合わせで構成されたデバイスを考えてみましょう。

  • 言語:フランス語
  • 地域:アメリカ合衆国

最初のpreferredLanguagesfr-USであり、これは実際の言語を表していません(米国で使用されているフランス語の特定のバージョンはありません)。

したがって、生成されたAccept-Languageは、多くの場合認識されない値が含まれています。 有効なコードのリストは次のとおりです

フランス/米国のデバイスでは、Alamofireは次のAccept-Language生成します: fr-US;q=1.0, en-US;q=0.9
利用可能な最良のロケールを見つけようとするこのPHP関数では正しく認識されません。 それは戻りますenの代わりにfr

対照的に、Safari iOSは、有効なAccept-Languageを送信するようにします。

フランス/米国のデバイスでは、送信されるAccept-Languagefr-frです。 (これは、ブラウザーによって送信されたHTTPヘッダーを知る簡単な方法です)。

理想的には、AlamofireはSafariと同じAccept-Languageを生成する必要があります。

  • Xcodeバージョン:8.2.1
  • iOSバージョン:iOS 10
http headers question

最も参考になるコメント

こんにちは@simonliotier

ここであなたの詳細なレポートに感謝します...大いに感謝します。 私たち全員が覚えておく必要があるのは、あなたのユースケースはfr-USを受け取りたくないが、他の人は受け取るかもしれないということです。 サーバー側でいつでもfr-USfr-FRに変換して適切なマッピングを行うことができますが、 fr-FRをユーザーが実際に使用しているロケールに戻す方法がわかりません。 fr-USます。

AlamofireはデフォルトでAccept-Languageのみを設定しますが、特定のユースケースに合わせてオーバーライドすることは大歓迎です。 ユーザーのロケールをより一般的にしようとするのは正しいとは思いません。

乾杯。 🍻

全てのコメント3件

報告ありがとうございます! ただし、 RFC 7231には、これらの組み合わせを公式に記載しているドキュメントはありません。 何か指摘してもらえますか? そうでなければ、可能な組み合わせから許容可能な組み合わせへの静的マップを維持する必要があるように思われますが、これは私たちがやりたいことではないでしょう。

公式リストも見つかりません。 Safariには受け入れ可能な組み合わせの独自のリストがあると思います。 😕

こんにちは@simonliotier

ここであなたの詳細なレポートに感謝します...大いに感謝します。 私たち全員が覚えておく必要があるのは、あなたのユースケースはfr-USを受け取りたくないが、他の人は受け取るかもしれないということです。 サーバー側でいつでもfr-USfr-FRに変換して適切なマッピングを行うことができますが、 fr-FRをユーザーが実際に使用しているロケールに戻す方法がわかりません。 fr-USます。

AlamofireはデフォルトでAccept-Languageのみを設定しますが、特定のユースケースに合わせてオーバーライドすることは大歓迎です。 ユーザーのロケールをより一般的にしようとするのは正しいとは思いません。

乾杯。 🍻

このページは役に立ちましたか?
0 / 5 - 0 評価