Función setlocale() php
Desarrollo web
La función setlocale() de php, establece los valores locales en el script que se está ejecutando; Valores como información monetaria,formatos de fecha y hora entre otros. Su sintaxis es la siguiente.
setlocale( constant, location)
La función recibe dos parámetros; Una constante (obligatoria) que especifica la información local que queremos establecer.
Constant
Las constantes disponibles son:
-LC_COLLATE orden de clasificación.
-LC_CTYPE clasificación y conversión de caracteres.
-LC_MESSAGES Mensajes de información del sistema.
-LC_MONETARY formatos de moneda.
-LC_NUMERIC formatos de números.
-LC_TIME para formatos de fecha y hora.
-LC_ALL para todas la anteriores.
Location
Especifica de que país o región se va a establecer la información.
Ejemplo:
<?php
/* Establece todas las constantes permitidas al español méxico*/
setlocale(LC_ALL, 'es_MX');
En ocasiones al tratar de establecer la local que se quiere fijar el resultado no es el esperado; Esto puede deberse a que es probable que el localismo no esté instalado en el servidor o tenga un nombre diferente. Para solucionar esto un pequeño truco que puede funcionar es mostrar las locales disponibles en el servidor, ver si aparece y como aparece la local deseada.
En mi caso al querer establecer una fecha en español para el siguiente script.../p>
<?php
$anio= '2019';
$mes = '02';
echo ucwords(strftime("%B %G",strtotime($anio.'-'.$mes)));
Sería suficiente agregar lo siguiente al script...
setlocale(LC_ALL,"es_MX");
Quedando de la siguiente forma...
<?php
setlocale(LC_ALL,"es_MX");
$anio= '2019';
$mes = '02';
echo ucwords(strftime("%B %G",strtotime($anio.'-'.$mes)));
Pero era el resultado siempre era el siguiente...
February 2019
Intenté de todo, cambiar el nombre de la local a mayúsculas, minúsculas, pero nada; Entonces fue que con el siguiente script busqué la lista de locales..
<?php
echo "Locales disponibles:";
system('locale -a');
O para filtrar las locales en español...
<?php
echo "Locales disponibles:";
system('locale -a | grep -i es');
Al ver la lista de locales note que para la local de español méxico solo aparecía la sig.
es_MX.utf8
Cuando lo mas común es que aparezcan estos dos ...
es_MX
es_MX.utf8
Entonces lo más fácil fue agregar al script, la local tal cual aparece...
<?php
setlocale(LC_ALL,"es_MX.utf8");
Quedando de la siguiente manera...
<?php
setlocale(LC_ALL,"es_MX.utf8");
$anio= '2019';
$mes = '02';
echo ucwords(strftime("%B %G",strtotime($anio.'-'.$mes)));
Con un resultado como el siguiente.
Febrero 2019