PHP: obtener la configuración regional actual

4 minutos de lectura

Estoy configurando la configuración regional del sitio web usando esta función:

function set_locale($locale) { // ie. en, es

    $language = $locale;
    putenv("LANG=".$language); 
    setlocale(LC_ALL, $language);
    $domain = "phd";
    bindtextdomain($domain, "locale"); 
    bind_textdomain_codeset($domain, 'UTF-8');

    textdomain($domain);

} // end set_locale

Cuando alguien visita el sitio, tiene la capacidad de cambiar su configuración regional. Lo que estoy tratando de hacer es en otro lugar del sitio recuperar cuál es la configuración regional actual.

¿Cómo haría esto?

  • guardarlo en una sesión?

    usuario557846

    29 de abril de 2015 a las 1:32

  • no sé por qué estás usando putenv, pero para recuperarlo simplemente usa getenv()

    – sol jr

    29 de abril de 2015 a las 1:34

  • ¿Cuál es el alcance de esta configuración? ¿Les está permitiendo configurarlo durante la duración de la conexión? ¿Está buscando un conjunto permanente? ¿O está tratando de determinar dinámicamente su ubicación?

    – jhansen

    29 de abril de 2015 a las 1:34

  • Hacen clic en un enlace con una variable GET como ?do=locale&lang=en y cada página verifica esas variables GET y, si se establece, se ejecutará a través de esta función.

    – MultiDev

    29 de abril de 2015 a las 1:36

  • Intenta echar un vistazo a stackoverflow.com/questions/2316476/…

    – ub3rst4r

    29 de abril de 2015 a las 2:00

avatar de usuario
Jerry Saravia

Puede llamar a setlocale así, y devolverá el local actual.

$currentLocale = setlocale(LC_ALL, 0);
echo $currentLocale; //outputs C/en_US.UTF-8/C/C/C/C on my machine

Aquí hay documentación de php.net comentada por @JROB

lugar

Si la configuración regional es “0”, la configuración de la configuración regional no se ve afectada, solo se devuelve la configuración actual.

Si la configuración regional es NULL o la cadena vacía “”, los nombres de la configuración regional se establecerán a partir de los valores de las variables de entorno con los mismos nombres que las categorías anteriores, o desde “LANG”.

Si la configuración regional es una matriz o va seguida de parámetros adicionales, se intenta establecer cada elemento o parámetro de la matriz como una nueva configuración regional hasta que tenga éxito. Esto es útil si una configuración regional se conoce con diferentes nombres en diferentes sistemas o para proporcionar una alternativa para una configuración regional que posiblemente no esté disponible.

  • Para aclarar, publiqué esto desde php.net: setlocale (int $category, string $locale). Si la configuración regional es “0”, la configuración de la configuración regional no se ve afectada, solo se devuelve la configuración actual.

    – usuariolond

    7 de septiembre de 2016 a las 4:35


  • Ver también localeconv para obtener formatos numéricos.

    -Peter Krauss

    25 de octubre de 2016 a las 13:26

  • Actualización para PHP 8.0+. yo suelo setlocale(LC_ALL, 'en_US'); pero setlocale(LC_ALL, 0); regresar solo C.

    – uve

    8 de diciembre de 2021 a las 11:09


  • Lo siento, encontré el problema ahora. (stackoverflow.com/a/70312801/128761)

    – uve

    11 de diciembre de 2021 a las 5:25

avatar de usuario
empollón guapo

¡Otra respuesta después de dos años!

Simplemente puede usar Locale::getDefault() o locale_get_default() para obtener la configuración regional actual.

http://php.net/manual/en/locale.getdefault.php

internacional Locale class es la alternativa moderna para funciones antiguas. Una vez que comenzó a usarlo, debe actualizar el local mediante la función php.net/manual/en/locale.setdefault.php

  • No, no lo hace. obtiene el defecto lugar, no el Actual lugar. La configuración regional predeterminada no es, por definición, la misma que la configuración regional actual. Cuando cambia de configuración regional, setlocale(LC_WHATEVER, 0) sigue siendo la forma de recuperar la configuración regional actual.

    – Friek

    31 mayo 2018 a las 12:30

  • Te estás refiriendo de nuevo a la defecto locale que, como ya dije, no es por definición el mismo que el Actual lugar.

    – Friek

    7 junio 2018 a las 12:20

  • Código generando documentos con diferentes locales, usando por ejemplo strftime. No es posible pasar una configuración regional a strftime, por lo que la configuración regional debe cambiarse temporalmente. Sé que el módulo intl podría usarse para el formato de fecha/hora, pero todavía hay muchas funciones en php que dependen de la configuración regional actual. Incluso la conversión de un flotante a una cadena utiliza la configuración regional actual. Como tal, la configuración regional predeterminada no siempre es útil cuando está haciendo cosas i18n y necesita cambiar entre diferentes configuraciones regionales.

    – Friek

    7 junio 2018 a las 16:15

  • Esto tampoco funciona en todas las máquinas. Recibí el error “Error no detectado: llamada a la función indefinida locale_get_default”.

    – uve

    28 de octubre de 2019 a las 12:58

  • @vee, primero debes instalar la extensión intl

    – Empollón guapo

    29 de octubre de 2019 a las 3:15

¿Ha sido útil esta solución?