Función setlocale() php

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