Detectando idioma del navegador
El idioma del navegador se detecta leyendo el valor de la variable de cabecera HTTP_ACCEPT_LANGUAGE. Concretamente, en PHP, el valor de esta variable está en:
$_SERVER['HTTP_ACCEPT_LANGUAGE']
El valor de esta variable depende. En el navegador Microsoft Internet Explorer se obtiene el valor "es"; en mi navegador Opera obtengo "en"; y en cambio en el Firefox se obtiene la ristra "es,en-us;q=0.7,en;q=0.3".
En Internet Explorer y Opera es fácil entender los valores: es un único código del idioma del navegador. En cambio, en Firefox, obtenemos una lista de tres grupos de códigos de idiomas separados por comas:
- es
- en-us;q=0.7
- en;q=0.3
Cada grupo puede estar dividido en dos partes: la primera parte indica el código del idioma; y la segunda, la que tiene un "q", indica la preferencia del lenguaje. El valor de q puede ir de 0 a 1, siendo el 1 el idioma de mayor preferencia y 0 el de menor preferencia.
En este caso, "es" no tiene definida la "q", pero sé que es el lenguaje de mayor preferencia porque así lo tengo definido en mis opciones (Herramientas > Opciones > Avanzado > Editar Idioma). De ahi deduzco que cuando no aparece la "q", se asume que tiene valor 1. De todas formas, está claro que Firefox envía los idiomas ordenados de izquierda a derecha.
Sabiendo esto, hacer un algoritmo que detecte el idioma del navegador es relativamente fácil. En PHP, sería algo así como esto:
Esto es todo. Espero que os sirva.
Fuente del artículo: Supporting user language preferences with HTTP_ACCEPT_LANGUAGE


