Locales… la puñetera PESADILLA en Kubuntu

Hola.

Esto no tiene nada que ver con el proyecto fin de carrera pero aprovecho para intentar solucionar un pequeño problemilla que ocurre mucho en KDE, sobre todo a la gente con teclado Español que quiere tener el sistema en Inglés.

Cuando configuramos las locales a través de la interfáz gráfica, a través de:

System Settings -> Locale

Solemos tener un problema que las locales nos toman valores raros (podemos verlos al lanzar el comando «locale»), como:

en_ES.UTF-8

Donde «en» es el idioma y «ES» la localización. Y estas locales no existen.

A partir de este momento, ocurren errores rarunos (en realidad son warnings, pero molestan tanto como un error) en la consola:

perl: warning: Setting locale failed.   
perl: warning: Please check that your locale settings:   
        LANGUAGE = "en_ES",   
        LC_ALL = (unset),   
        LC_MESSAGES = "en_ES.UTF-8",   
        LANG = "en_ES.UTF-8"   
    are supported and installed on your system.   
perl: warning: Falling back to the standard locale ("C").   
locale: Cannot set LC_CTYPE to default locale: No such file or directory   
locale: Cannot set LC_MESSAGES to default locale: No such file or directory   
locale: Cannot set LC_ALL to default locale: No such file or directory  

O cosas similares.

Si indagamos por internet nos proponen lanzar «dpkg-reconfigure locales» y «update-locale» pero esto no soluciona nuestros problemas.

Tras indagar durante meses (me ha pasado en 2 ordenadores y en uno de ellos dos veces) he recaudado información variada.  Las soluciones que leemos por internet son más que correctas para una máquina Debian, pero nosostros no tenemos una máquina debian al uso. Tenemos un Kubuntu, que es un Ubuntu (basado en Debian) y que tiene KDE por encima. Lo que estaba ocurriendo era que solucionábamos el problema a medias.

Otra de las soluciones que hay, que funciona de verdad es exportar las locales como variable, y todo tira bien, eso es porque cambiamos el contenido de las variables por las correctas en memoria. El sistema cuando quiera escribir un mensaje o cualquier cosa, leerá las variables y escribirá en ese idioma, pero cuando reiniciemos perderemos el contenido de las variables y se volverá a producir el mismo problema.

Una vez sabiendo esto, podemos deducir que la forma de solucionar el problema es editar la forma en la que se setean los valores de las variables de las locales (las que hemos leido antes con «locale»).

Por esto que acabamos de ver, una de las soluciones que suelen dar es cambiar el contenido del archivo «.bashrc» de la carpeta personal, pero eso es una solución muy sucia que no recomiendo. Hay que ir al fondo del asunto.

La solución que hemos visto más arriba, basada en update-locale (que sería la que se vé más abajo) lo que hace es editar el contenido del archivo /etc/default/locale. Este archivo simplemente guarda los valores que le introducimos al comando.

update-locale LANG="en_US.UTF-8" LC_NUMERIC="es_ES.UTF-8" LC_TIME="es_ES.UTF-8" LC_MONETARY="es_ES.UTF-8" LC_PAPER="es_ES.UTF-8" LC_NAME="es_ES.UTF-8" LC_ADDRESS="es_ES.UTF-8" LC_TELEPHONE="es_ES.UTF-8" LC_MEASUREMENT="es_ES.UTF-8" LC_IDENTIFICATION="es_ES.UTF-8"

Una vez lo hemos hecho el archivo mencionado está editado, pero las locales siguen mal, con los valores de antes (incluso alguno ha podido cambiar) y sigue habiendo errores.

Esto significa que se setean las variables después de consultar ese archivo, cosa que parece lógica, porque ese archivo se llama «default», es decir, por defecto. Es lógico pensar que luego viene la configuración personal.

Esa configuración personal se setea en un script que se lanza posteriormente: .kde/env/setlocale.sh. Si lo vemos, vemos que las variables que mostramos al ejecutar «locale» se corresponden con el contenido de este archivo y el contenido del archivo /etc/default/locale para las variables que no se setean en setlocale. Parece ser entonces que es necesario ajustar ambos archivos a nuestro objetivo, cosa que podemos hacer así (el otro se puede editar con update-locale o directamente de forma similar):

sudo vim .kde/env/setlocale.sh 

Y le añadimos el contenido que queremos, en mi caso:

export LANG=en_US.UTF-8
export LANGUAGE=en
export LC_NUMERIC=es_ES.UTF-8
export LC_TIME=es_ES.UTF-8
export LC_MONETARY=es_ES.UTF-8
export LC_PAPER=es_ES.UTF-8
export LC_IDENTIFICATION=es_ES.UTF-8
export LC_NAME=es_ES.UTF-8
export LC_ADDRESS=es_ES.UTF-8
export LC_TELEPHONE=es_ES.UTF-8
export LC_MEASUREMENT=es_ES.UTF-8

Si lanzamos locale de nuevo ahora seguiremos viendo que las variables de las locales siguen mal. Pero es porque están sin setear, pero hay que reiniciar para que todo vaya bien.

Reiniciamos y listo.

Espero que os sirva.

Un abrazo.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.