Agregando locales en Debian

Cuando jugamos con archivos .po y .mo en un proyecto web para dar soporte a distintos idiomas tenemos dependencia de las polémicas locales de cada sistema. Vamos a intentar solucionarlo.

En Debian -y en cualquier distribución desde que se sabe hacer- es sencillo, con el comando locale podemos saber las locales que tenemos instaladas:

# locale -a
C
POSIX
eS_ES.utf8

Pero nosotros queremos modificar esa lista, agregar nuevas locales o eliminar las que no se vayan a usar.

Agregando locales nuevas

Si queremos agregar soporte para otro idioma sería tan sencillo como decirle al sistema lo que tiene que hacer con locale-gen y actualizar la base de datos dpkg-reconfigure:

# locale-gen de_DE.UTF-8
# locale-gen it_IT.UTF-8
# locale-gen fr_FR.UTF-8
# locale-gen pt_PT.UTF-8
# dpkg-reconfigure locales

Comprobemos que todo está correcto listando las nuevas locales con el comando que hemos mencionado anteriormente:

# locale -a
C
POSIX
eS_ES.utf8
de_DE.UTF-8
it_IT.UTF-8
fr_FR.UTF-8
pt_PT.UTF-8

Eliminando locales inútiles

Para borrar locales que hemos agregado por error el proceso es algo distinto, tan solo debemos ir al directorio /var/lib/locales/supported.d/ y editar los ficheros necesarios hasta quedarnos solo con lo adecuado, por ejemplo:

# cd /var/lib/locales/supported.d/
# ls
en  es  local
# cat en
en_GB.UTF-8 UTF-8
# cat es
es_ES.UTF-8 UTF-8
# cat local
es_ES.UTF-8 UTF-8
de_DE.UTF-8 UTF-8
it_IT.UTF-8 UTF-8
fr_FR.UTF-8 UTF-8
pt_PT.UTF-8 UTF-8

Teóricamente todas las modificaciones que hagamos con locale-gen se van a escribir en el fichero local, con lo que es más que probable que sea el único archivo que vamos a toquetear.

Si en local tuviéramos otras locales que no queremos, pongamos por caso que deseamos eliminar el portugués, con eliminar esa linea y volver a reconstruir la base de datos (dpkg-reconfigure) sería suficiente.

Soporte en PHP

Recordemos el código fuente que le corresponde en PHP para cargar el idioma que acabamos de agregar (dependdiente de gettext()):

$locale=\"de_DE.UTF-8\";
putenv(\"LANG=$locale\");
setlocale(LC_ALL, $locale);
setlocale(LC_NUMERIC,\'C\');
bindtextdomain(\'archivo-mo\', \'dir/de/idiomas/\');
textdomain(\'archivo-mo\'); 

Nota: Muy importante el correcto uso de las mayúsculas en todos los comandos, tanto para agregar las locales con locale-gen como para cargarlas en PHP.

Entradas y enlaces relacionados

sysadmin

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.