Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Fechas (días de la semana, meses) traducidas en tu idioma en PHP en un sistema Linux

Imago voragine.net

En PHP la función date devuelve una fecha en inglés, sin posibilidad de traducirla a otro idioma. Por ejemplo para obtener el nombre del mes actual:

echo date('F');
// devuelve "August"

Para obtener una fecha en otro idioma se debe usar strftime, que tiene una sintaxis parecida a date pero que consulta el idioma local del sistema que esté activo y traduce la fecha.

echo strftime('%B');
// devuelve "august" traducido al idioma local

¿Cuál es el idioma local? Idiomas en un sistema Linux

Un sistema Linux puede tener instalados varios idiomas, preparados para que las aplicaciones como PHP los activen cuando los necesiten. Para saber qué idiomas hay instalados se puede usar la siguiente orden en la línea de comandos:

$ locale -a
C
C.UTF-8
es_ES.utf8

Para instalar un nuevo idioma, se puede usar dpkg-reconfigure como root:

dpkg-reconfigure locales

Cambiar el idioma local activo en PHP

Con la orden setlocale se puede cambiar el idioma activo en PHP.

setlocale(LC_TIME, 'es_ES','es_ES.utf8');

El primer parámetro indica la categoría de elementos para la que se quiere cambiar el idioma: LC_MONETARY para la moneda, LC_NUMERIC para los separadores de miles y decimales en números, LC_TIME para fechas… Los siguientes parámetros (tantos como se quiera), indican los códigos de idiomas a los que se intentará cambiar. Para que la orden funcione el código de idioma tiene que estar escrito tal y como lo está en el sistema, y como los códigos pueden variar de un sistema a otro conviene cubrirse las espaldas suministrando a setlocale varias opciones.

Por último, setlocale puede cambia el idioma para todo el entorno PHP. Si hace falta volver al idioma por defecto del sistema:

setlocale(LC_TIME,'C.utf8', 'C');

Bola extra. strftime devuelve el nombre del mes en minúsculas. Para obtener el mes con la primera letra mayúscula:

echo ucfirst( strftime( '%B' ) );

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks