working spanish not español date_format php locale

spanish - set locale php 7



La forma más simple de detectar la configuración regional del cliente en PHP (12)

Dado su propósito declarado, el encabezado Accept-Language es una solución más adecuada que la geolocalización basada en IP. De hecho, es precisamente el propósito de Accept-Language.

Me gustaría poder detectar de qué país es un visitante en mi sitio web, usando PHP.

Tenga en cuenta que no estoy tratando de usar esto como una medida de seguridad o para algo importante, simplemente cambiando la ortografía de algunas palabras (los estadounidenses parecen creer que la palabra "inscripción" tiene 2 L ... locos) , y quizás para dar una opción predeterminada en la lista "Seleccione su país".

Como tal, usar una base de datos de geolocalización es un poco exagerado y realmente no quiero perder el tiempo con la instalación de nuevas bibliotecas PHP solo para esto, así que ¿cuál es la forma más fácil / simple de encontrar el país del visitante?


El servicio http://countries.nerd.dk es lo que uso para la asignación de IP a país. Funciona muy bien y, al estar basado en DNS, también se almacena en la memoria caché.

También puede descargar la base de datos para uso local si no desea confiar en un servicio externo.


La extensión GeoIP es una buena opción.


No se garantiza, pero la mayoría de los navegadores envían un encabezado HTTP Accept-Language que especifica en-us si son de los EE. UU. Sin embargo, algunos navegadores antiguos solo decían que estaban en. Y no todas las máquinas están configuradas correctamente para indicar qué configuración regional prefieren. Pero es una buena primera suposición.

Los usuarios basados ​​en inglés y en el Reino Unido suelen establecer su configuración regional de usuario o sistema en inglés-Reino Unido, que en las configuraciones de navegador predeterminadas debería dar como resultado en-gb el encabezado Aceptar idioma. (Una versión anterior de esto dijo en-uk; eso fue un error tipográfico, lo siento.) Otros países también tienen en localizaciones, como en-za (sudáfrica), y, principalmente teóricamente, combinaciones como en-jp también son posibles.

Sin embargo, las conjeturas basadas en Geo-IP serán menos correctas en el idioma / lugar preferido. Google cree que la negociación de contenido basada en la geolocalización de direcciones IP tiene sentido, lo que realmente me molesta cuando estoy en Japón o Corea ...


O puede hacer lo siguiente:

descarga ''geoip.dat'' y geoip.inc desde http://www.maxmind.com/app/geoip_country

en el encabezado geoip.inc, encontrará cómo usarlo (por ejemplo, inicializar y el resto ...)


PHP proporciona una función desde 5.3.0 para analizar la variable $ _SERVER [''HTTP_ACCEPT_LANGUAGE''] en una configuración regional.

http://www.php.net/manual/en/locale.acceptfromhttp.php

$locale = Locale::acceptFromHttp($_SERVER[''HTTP_ACCEPT_LANGUAGE'']); echo $locale; // returns "en_US"


Para identificar su país de visitantes, he usado la extensión GeoIP , muy fácil de usar.


Parse $ _SERVER ["HTTP_ACCEPT_LANGUAGE"] para obtener el país y la configuración regional del navegador


Puede consultar el encabezado HTTP_ACCEPT_LANGUAGE (desde $ _SERVER) que la mayoría de los navegadores enviarán.

Eche un vistazo a Zend_Locale para ver un ejemplo, o tal vez incluso quiera usar la lib.


Puede hacer una comparación de IP sin tener una biblioteca completa para hacerlo.

Solución n. ° 1

Use una API, de esta manera no necesita nada de su lado. Esta es una API web que le permite conocer el país:

Example: http://api.hostip.info/get_html.php?ip=12.215.42.19 Return : Country: UNITED STATES (US)

Solución n. ° 2

Pero, ¿has pensado utilizar el lenguaje del agente navegador? Es posible que puedas conocer el tipo de inglés que contiene.

Solución n. ° 3

Este sitio web llamado BlockCountry permite tener una lista de IP por país. Por supuesto, no desea bloquear, pero puede usar la lista de IP y compararlos (obtener todos los IP de EE.UU. ...) esto podría no ser preciso ...


Una cosa es qué idioma quiere el espectador, segundo, que puede servir:

$SystemLocales = explode("/n", shell_exec(''locale -a'')); $BrowserLocales = explode(",",str_replace("-","_",$_SERVER["HTTP_ACCEPT_LANGUAGE"])); // brosers use en-US, Linux uses en_US for($i=0;$i<count($BrowserLocales);$i++) { list($BrowserLocales[$i])=explode(";",$BrowserLocales[$i]); //trick for "en;q=0.8" for($j=0;$j<count($SystemLocales);$j++) { if ($BrowserLocales[$i]==substr($SystemLocales[$j],0,strlen($BrowserLocales[$i]))){ setlocale(LC_ALL, $SystemLocales[$j]); break 2; // found and set, so no more check is needed } } }

por ejemplo, el sistema de mina solo sirve:

  • do
  • POSIX
  • pl_PL.UTF-8

y los idiomas de mi navegador son: pl, en-US, en => entonces la única localización correcta es pl_PL.UTF-8.

Cuando no se encuentra una comparación exitosa, no hay setlocale en absoluto.


Yo uso el HTTP_ACCEPT_LANGUAGE

$localePreferences = explode(",",$_SERVER[''HTTP_ACCEPT_LANGUAGE'']); if(is_array($localePreferences) && count($localePreferences) > 0) { $browserLocale = $localePreferences[0]; $_SESSION[''browser_locale''] = $browserLocale; }