La forma correcta es mirar el encabezado HTTP Accept-Language enviado al servidor. Contiene la lista ordenada y ponderada de idiomas que el usuario ha configurado para que su navegador prefiera.
Lamentablemente, este encabezado no está disponible para leer dentro de JavaScript; todo lo que obtienes es navigator.language
, que te dice qué versión localizada del navegador web se instaló. Esto no es necesariamente lo mismo que los idiomas preferidos del usuario. En IE, en cambio, obtienes systemLanguage
(idioma instalado del sistema operativo), browserLanguage
(igual que language
) y userLanguage
(región del sistema operativo configurada por el usuario), que son igualmente inútiles.
Si tuviera que elegir entre esas propiedades, olfatearía userLanguage
primero, retrocediendo language
y solo después de eso (si no coincidían con ningún idioma disponible) mirando browserLanguage
y finalmente systemLanguage
.
Si puede colocar un script del lado del servidor en otro lugar en la red que simplemente lea el encabezado Accept-Language y lo escupe de nuevo como un archivo JavaScript con el valor del encabezado en la cadena, por ejemplo:
var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
entonces podría incluir un <script src> apuntando a ese servicio externo en el HTML, y usar JavaScript para analizar el encabezado del idioma. Sin embargo, no conozco ningún código de biblioteca existente para hacer esto, ya que el análisis de Accept-Language casi siempre se realiza en el lado del servidor.
Lo que sea que termines haciendo, ciertamente necesitas una anulación del usuario porque siempre adivinará mal para algunas personas. A menudo es más fácil poner la configuración de idioma en la URL (por ejemplo, http: //www.example.com/en/site vs http: //www.example.com/de/site), y dejar que el usuario haga clic enlaces entre los dos. En ocasiones, desea una única URL para las dos versiones de idioma, en cuyo caso debe almacenar la configuración en las cookies, pero esto puede confundir a los agentes del usuario con la no compatibilidad con cookies y motores de búsqueda.