SetLocale en PHP

Hace poco tuve un problema con el setlocale en PHP. Tengo instalado un plugin, hecho por mi, en una instalación de WordPress que tengo en mi ordenador, con un servidor local.

El plugin funcionaba en local a las mil maravillas, ya que con el setlocale de php cambiaba los idiomas de acuerdo a la selección de idioma del usuario:

setlocale(LC_ALL, $code_locale);

Donde $code_locale lo saco de la información del lenguage seleccionado por el usuario de otro plugin, WPML, del que ya comenté algo el otro día.

El caso es que al subir mi plugin al servidor de producción, no se mostraban bien los días de la semana. De hecho siempre se mostraban en inglés. Haciendo un poco de debugging con echos comprobé que, haciendo una llamada a setlocale con el segundo parámetro a 0:

$code_locale = setlocale(LC_ALL, 0);

el $code_locale que me estaba devolviendo era una simple “C” y no algo como “es_ES” que es lo que me esperaba.

Leyendo un poco por el manual de setlocale en inglés, me enteré de que el sistema estaba en POSIX (supongo que tendrá que ver que el servidor sea un Linux) y por eso PHP me devolvía una “C”.

Un poco más de investigación me llevó a la conclusión de que con ponerle “.UTF8” después del código del lenguage que quería sería suficiente, con lo que quedaría por ejemplo para francés:

setlocale(‘fr_FR.UTF8’);

y aquí la función que he acabado usando:

3 opiniones en “SetLocale en PHP”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *