Alamofireは、言語と地域の組み合わせであるLocale
のpreferredLanguages
プロパティを使用して、 Accept-Language
ヘッダーを生成します。
これは、標準の組み合わせでうまく機能します: en-US
、 fr-FR
、 fr-CA
.. ..
ただし、ユーザーが地域に一致しない言語を選択した場合、 Accept-Language
として使用できない組み合わせが得られます。
たとえば、次の組み合わせで構成されたデバイスを考えてみましょう。
最初のpreferredLanguages
はfr-US
であり、これは実際の言語を表していません(米国で使用されているフランス語の特定のバージョンはありません)。
したがって、生成されたAccept-Language
は、多くの場合認識されない値が含まれています。 有効なコードのリストは次のとおりです。
フランス/米国のデバイスでは、Alamofireは次のAccept-Language
生成します: fr-US;q=1.0, en-US;q=0.9
利用可能な最良のロケールを見つけようとするこのPHP関数では正しく認識されません。 それは戻りますen
の代わりにfr
。
対照的に、Safari iOSは、有効なAccept-Language
を送信するようにします。
フランス/米国のデバイスでは、送信されるAccept-Language
はfr-fr
です。 (これは、ブラウザーによって送信されたHTTPヘッダーを知る簡単な方法です)。
理想的には、AlamofireはSafariと同じAccept-Language
を生成する必要があります。
報告ありがとうございます! ただし、 RFC 7231には、これらの組み合わせを公式に記載しているドキュメントはありません。 何か指摘してもらえますか? そうでなければ、可能な組み合わせから許容可能な組み合わせへの静的マップを維持する必要があるように思われますが、これは私たちがやりたいことではないでしょう。
公式リストも見つかりません。 Safariには受け入れ可能な組み合わせの独自のリストがあると思います。 😕
こんにちは@simonliotier 、
ここであなたの詳細なレポートに感謝します...大いに感謝します。 私たち全員が覚えておく必要があるのは、あなたのユースケースはfr-US
を受け取りたくないが、他の人は受け取るかもしれないということです。 サーバー側でいつでもfr-US
をfr-FR
に変換して適切なマッピングを行うことができますが、 fr-FR
をユーザーが実際に使用しているロケールに戻す方法がわかりません。 fr-US
ます。
AlamofireはデフォルトでAccept-Language
のみを設定しますが、特定のユースケースに合わせてオーバーライドすることは大歓迎です。 ユーザーのロケールをより一般的にしようとするのは正しいとは思いません。
乾杯。 🍻
最も参考になるコメント
こんにちは@simonliotier 、
ここであなたの詳細なレポートに感謝します...大いに感謝します。 私たち全員が覚えておく必要があるのは、あなたのユースケースは
fr-US
を受け取りたくないが、他の人は受け取るかもしれないということです。 サーバー側でいつでもfr-US
をfr-FR
に変換して適切なマッピングを行うことができますが、fr-FR
をユーザーが実際に使用しているロケールに戻す方法がわかりません。fr-US
ます。Alamofireはデフォルトで
Accept-Language
のみを設定しますが、特定のユースケースに合わせてオーバーライドすることは大歓迎です。 ユーザーのロケールをより一般的にしようとするのは正しいとは思いません。乾杯。 🍻