Alamofire产生Accept-Language
使用标头preferredLanguages
的属性Locale
,这是语言和该区域的组合。
这适用于标准组合: 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
,但我们非常欢迎您针对您的特定用例覆盖它。 我认为我们尝试使用户的语言环境更通用是不正确的。干杯。 🍻