¿Es una buena idea utilizar el encabezado Accept-Language (aceptar el idioma) de HTTP para determinar la ubicación del usuario?
Debido a una serie de razones perfectamente válidas, sería deseable que algunas aplicaciones web estuvieran asociadas a una ubicación para cada usuario que visite el sitio. Esta ubicación las habilitaría para suministrar información en el formato local. Parte de esta información es común a ubicaciones de software tradicionales, por ejemplo:
En otros casos, puede extraerse otro tipo de información de la información de la ubicación, además de conocimientos adicionales, por ejemplo:
Dado que ninguno de estos datos están incluidos en el protocolo HTTP, muchos desarrolladores web han empleado el encabezado Accept-Language para hacer inferencias acerca de la ubicación del usuario.
El encabezado Accept-Language es información acerca de las preferencias de idioma del usuario que se envían mediante HTTP cuando se solicita un documento. Los navegadores predominantes permiten que estas preferencias de idioma sean modificadas por el usuario. El valor en sí mismo está definido por BCP 47, normalmente como un código de idioma de dos o tres letras (por ejemplo: fr
para francés), seguido por subcódigos opcionales que representan elementos tales como el país (por ejemplo: fr-CA
representa francés tal como se habla en Canadá).
La pregunta es si esta información es adecuada para determinar la ubicación del usuario.
Originalmente, el encabezado Accept-Language de HTTP estaba destinado a especificar el idioma del usuario. Sin embargo, dado que muchas aplicaciones necesitan saber la ubicación del usuario, en la práctica común, se ha empleado Accept-Language para determinar esta información. No es una buena idea utilizar el encabezado Accept-Language solo para determinar la ubicación del usuario. Si utiliza exclusivamente Accept-Language, es posible que deje al usuario sin otra alternativa entre una serie de opciones que no son de su agrado.
Para un primer contacto, emplear el valor Accept-Language para inferir configuraciones regionales puede ser un buen punto de partida, pero asegúrese de que puedan modificar el idioma según sea necesario y especificar sus configuraciones culturales con más exactitud, si se requiere. Almacene los resultados en una base de datos o en una cookie para futuras visitas.
Algunas de las dificultades potenciales incluyen las siguientes:
de-DE
, de-CH
o de-AT
para indicar que es alemán tal como se habla en Alemania, Suiza o Austria, respectivamente. Por otra parte, podría recibir sólo de
, que indica una preferencia por el alemán. Si estuviera planificando emplear la región para decidir qué unidad monetaria utilizar, tendrá problemas. Sus circunstancias particulares podrían llevarlo a hacer suposiciones tales como "Alemania tiene 83 millones de habitantes y Suiza tiene 8 millones, pero sólo el 65% habla alemán; Austria tiene 8 millones de habitantes; de modo que este usuario probablemente emplee el euro. Si estuviéramos equivocados, sólo ofenderíamos al 5,4% de nuestros clientes hablantes de alemán, es decir, a sólo 5 millones de personas". No dude en asumir esto si acepta correr el riesgo. Es mucho más simple solicitar más información al usuario. Además, los cálculos se dificultan para español o para inglés, por ejemplo.Emplear el encabezado Accept-Language también es un buen punto de partida para determinar el idioma del usuario, en lugar de la ubicación, pero aun en ese caso, usted debe saber sus limitaciones y proporcionar al usuario alguna forma de invalidar los supuestos que haga. Muchos de los problemas potenciales arriba enumerados también se aplican aquí.
Aunque no esté haciendo suposiciones de manera intencional acerca de la ubicación o la región, debe ser consciente de que su entorno de programación puede estar haciendo las mismas suposiciones. De manera predeterminada, muchos servidores web, lenguajes de secuencia de comandos del área del servidor y entornos operativos analizan e infieren su ubicación nativa a partir de Accept-Language. Por ejemplo, .NET utiliza Accept-Language para determinar la CultureInfo (información cultural) predeterminada, Java Servlet proporciona un par de métodos getLocale() y getLocales() que analizan Accept-Language, y así sucesivamente. Estos objetos son muy útiles para obtener recursos y otros materiales sobre "preferencia de idioma". Son menos útiles, como se señaló anteriormente, para determinar muchos de los detallados atributos de los usuarios o para designar el comportamiento internacional de un sitio. Una preferencia de idioma de es-MX no significa necesariamente que debe formatearse o validarse un formulario de dirección postal para las direcciones de México. Aun así, es posible que el usuario viva en EE. UU. (o en otro lugar).