Alamofire genera Accept-Language
encabezados usando la propiedad preferredLanguages
de Locale
, que es una combinación del idioma y la región.
Esto funciona bien para combinaciones estándar: en-US
, fr-FR
, fr-CA
...
Sin embargo, si el usuario elige un idioma que no coincide con la región, obtenemos una combinación que no se puede usar como Accept-Language
.
Por ejemplo, tome un dispositivo configurado con la siguiente combinación:
El primer preferredLanguages
es luego fr-US
, que no representa un idioma real (no existe una versión específica del idioma francés utilizado en los EE. UU.).
Por lo tanto, el Accept-Language
generado contiene un valor que no se reconocerá en muchos casos. Aquí hay una lista de códigos válidos .
En un dispositivo francés / estadounidense, Alamofire genera los siguientes Accept-Language
: fr-US;q=1.0, en-US;q=0.9
Esta función PHP no lo reconoce correctamente, que intenta encontrar la mejor configuración regional disponible. Devolverá en
lugar de fr
.
Por el contrario, Safari iOS se asegura de enviar un Accept-Language
válido:
En un dispositivo francés / estadounidense, el Accept-Language
enviado es fr-fr
. (Aquí hay una forma rápida de conocer los encabezados HTTP enviados por un navegador).
Idealmente, Alamofire debería generar los mismos Accept-Language
que Safari.
¡Gracias por el informe! Sin embargo, no puedo encontrar documentación en RFC 7231 que
Tampoco puedo encontrar una lista oficial. Supongo que Safari tiene su propia lista de combinaciones aceptables. 😕
Hola @simonliotier ,
Gracias por su informe detallado aquí ... muy apreciado. Lo que todos debemos tener en cuenta es que, si bien su caso de uso no desea recibir fr-US
, otros sí pueden hacerlo. Siempre puede convertir fr-US
a fr-FR
en el lado del servidor para hacer un mapeo adecuado, pero nunca sabría cómo revertir fr-FR
a lo que el usuario realmente tiene en su configuración regional establecido en el que es fr-US
.
Alamofire solo establece el Accept-Language
de forma predeterminada, pero puede anularlo para su caso de uso particular. No creo que sea correcto que intentemos hacer que la configuración regional del usuario sea más genérica.
Salud. 🍻
Comentario más útil
Hola @simonliotier ,
Gracias por su informe detallado aquí ... muy apreciado. Lo que todos debemos tener en cuenta es que, si bien su caso de uso no desea recibir
fr-US
, otros sí pueden hacerlo. Siempre puede convertirfr-US
afr-FR
en el lado del servidor para hacer un mapeo adecuado, pero nunca sabría cómo revertirfr-FR
a lo que el usuario realmente tiene en su configuración regional establecido en el que esfr-US
.Alamofire solo establece el
Accept-Language
de forma predeterminada, pero puede anularlo para su caso de uso particular. No creo que sea correcto que intentemos hacer que la configuración regional del usuario sea más genérica.Salud. 🍻