domingo, 19 de agosto de 2007

Obtener el idioma por defecto de un cliente web en PHP

Para obtener los idiomas por defecto que quiere usar un usuario web debemos obtener la lista de idiomas deseados por este.
En php tenemos una variable de entorno que podemos utilizar, es:
HTTP_ACCEPT_LANGUAGE
para obtener la lista de idiomas debemos ejecutar la sentencia
getenv("HTTP_ACCEPT_LANGUAGE");
Por ejemplo, para mi configuración se devuelve
es-es,es;q=0.8,en-us;q=0.6,en;q=0.4,eu;q=0.2
Tenemos un vector con una dupla de datos , cada dupla está separado por una coma ',' y los elementos de cada dupla están separados por punto y coma ';'.
El primer elemento de la dupla es el nombre del idioma y el segundo indica el interés del usuario por este, el valor que indica q (q=0.6) varía entre 1 y 0 , siendo 1 el elemento de más peso. Hay una dupla que no tiene segundo elemento y es el primero , en este caso asumimos que es el elemento más importante (q=1).

A la hora de elegir el idioma con el que mostrar la aplicación deberíamos tener varias cosas en consideración.
  • La primera la lista de idiomas disponibles en la aplicación.
  • La segunda la lista de idiomas que tiene el usuario elegidos en su navegador.
  • Por último debemos elegir el idiomas mejor posicionado en la lista de idiomas del navegador que tengamos en nuestro sistema.

Por regla general y después de realizar muchas pruebas se puede generalizar que el orden en el que obtenemos el vector de idiomas es el orden deseado por el usuario así que nos podemos ahorrar el trabajo de ordenar la lista de idiomas por el segundo elemento de la dupla.

5 comentarios:

Anónimo dijo...
Este comentario ha sido eliminado por un administrador del blog.
Anónimo dijo...
Este comentario ha sido eliminado por un administrador del blog.
Anónimo dijo...
Este comentario ha sido eliminado por un administrador del blog.
Anónimo dijo...
Este comentario ha sido eliminado por un administrador del blog.
snmn dijo...

Función obtener el idioma del navegador dentro de una class

function get_browser_language() {
$this->browser_languages = explode(',', getenv('HTTP_ACCEPT_LANGUAGE'));
for ($i=0, $n=sizeof($this->browser_languages); $i<$n; $i++) {
reset($this->languages);
while (list($key, $value) = each($this->languages)) {
if (eregi('^(' . $value . ')(;q=[0-9]\\.[0-9])?$', $this->browser_languages[$i]) && isset($this->catalog_languages[$key])) {
$this->language = $this->catalog_languages[$key];
break 2;
}