Agregando locales en Debian - Userlinux.net

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…

Agregando locales en Debian

03.Nov.2009 ~ 5 Comentarios ~ 1401 Lecturas
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

Comentarios


gravatar
03.Nov.2009
soporte para idiomas a on!

gravatar
03.Nov.2009
Sip, ha costado pero al fin creo que está claro como funciona gettext() con los archivos .po y .mo en php y las locales del sistema. Ha merecido la pena -imho-.

gravatar
03.Nov.2009
Interesante...

Como vai o tema de consumo de recursos usando esta opción?

As solucións que teño vistas para o tema da localización de proxectos web é a través de variables ou vectores (clave-valor) [tipo CodeIgniter].

gravatar
03.Nov.2009
@foz: Teóricamente se carga un archivo .mo compilado que no debiera consumir tanta memoria como X variables/constantes en memoria, teniendo en cuenta que en proyectos grandes X tiende a infinito :P.

gravatar
07.Nov.2009
Muy buen artículo, en especial me ha encantado la explicación para PHP (bastante similar a lo que hay que poner para PyGTK por cierto).

Creo que existe también una forma gráfica (por terminal) para activar y desactivarlos (pero mi mala memoria no me permite acordarme del nombre).

Saludos

Comentarios


Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 15 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Buscar

Cargando...

Últimos comentarios

  • Juan
  • Marina
  • Francisco
  • fon
  • minWi
  • isra
  • reidrac
  • r0sk
  • Rodrigo Rega
  • minWi
  • r0sk
  • reidrac
  • r0sk
  • deady
  • errece

Moneting

Valor de mi cuenta de Facebook según Moneting
Valor de mi cuenta de Twitter según Moneting

Tagcloud

ssh frases champions userlinux iphone lugo rsidenotes felicidades films nintendo opinion sysadmin 2008 blogsfera vacaciones juegos cake ds debian sidenotes apple web blogs mac mysql cakephp deportes 2007 mundial openbsd barça ubuntu twitter blog humor meme canción alemania_2006 games bsd lucux linux twitt programación cumpleaños software django league bash macosx ps3 rfilms conciertos freebsd seguridad personal hack php bake futbol

Archivo

Social

Enlaces de interés