2009-09-29 15 views
7

Actualmente estoy trabajando en un auto-idioma de detección del usuario para proporcionar el contenido en el idioma del usuario.detectar el idioma del usuario en PHP - solución estable

Por supuesto, es posible cambiar el idioma manualmente, pero si un usuario visita la página por primera vez, quiero proporcionar el contenido en su idioma.

por lo que estaba buscando en Google y encontró el $ _SERVER [ 'HTTP_ACCEPT_LANGUAGE'] - Var para obtener un resultado como ese:

de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

cuál es la mejor manera de filtrar este resultado para obtener un resultado claro como "ES "/" DE "/" IT "?

$rL = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
$langCode = strtoupper($rl[0].$rl[1]); 

El segundo problema en este Server-Var es que solo me da un resultado si el navegador proporciona alguna información. ¿Establecer el idioma de página predeterminado es la única posibilidad de manejar eso?

La segunda posibilidad que me interesa es obtener el idioma por IP. Entonces, si obtengo el Idioma, probablemente conozca el idioma del usuario. Pero ¿qué hay en países de varios idiomas como Suiza, Bélgica? ¿Qué pasa con tld es como .com/.net/.org y así sucesivamente?

Entonces, ¿qué método aplicarías para detectar el idioma de los usuarios?

gracias por ayudar.

Respuesta

5

Stick with Accept-Language. Todos los navegadores pasan el encabezado y es mucho más probable que sea el idioma que el usuario quería que la suposición aproximada de geolocalización.

PECL tiene http_negotiate_language que se puede analizar la cabecera y elegir un idioma para que adecuadamente, aunque en la práctica, incluso el método un tanto falsa de simplemente buscando en/de/it en la cadena funciona mejor que la inhalación de IP.

Whats with tld's like .com/.net/.org and so on.

nombres de dominio no están a menudo involucrados en IP oler, que tiene su propia base de datos back-end de los rangos de IP que son probablemente conectado a algún país. La resolución inversa para las conjeturas de los países es de casi ninguna utilidad, ya que pocas IPs se resuelven de forma inversa a un ccTLD.

+0

bueno, cuando trato de usar el ejemplo del http_negotiate_language que recibí - Error fatal: llamada a la función indefinida http_negotiate_language() - ¿qué hago mal? – wildhaber

+0

Instala la extensión pecl_http. http://uk.php.net/manual/en/http.install.php Alternativamente, hay una versión PHP nativa en los comentarios de la página negotiate_language que parece que debería estar bien. – bobince

1

Como una buena práctica, voy a ir con los componentes Zend_Locale realmente bien desarrollados de Zend Framework.

Tiene todo lo que necesita para I18n y localizar su aplicación, desde la detección de la configuración local del usuario hasta la gran cantidad de soluciones internacionalizadas de moneda, número, formato de fecha y gestión de traducción.

Cuestiones relacionadas