2.6.1. Configuración del idioma

La lengua con la que nos comunicamos con el sistema viene determinada por un conjunto de variables de ambiente, de modo que hacer que éste cambie de idioma consiste básicamente en saber cuáles son estas variables y qué valores debemos asignarles.

Además, hemos de tener en cuenta que usar una lengua u otra, no implica solamente la comunicación mediante mensajes, sino también aspectos como la ordenación alfabética, el formato de las fechas o el separador de decimales.

En linux, hay tres variables generales LANGUAGE, LANG y LC_ALL y una serie de variables que afectan a aspectos particulares del idioma:

Variables

POSIX1

Descripción

LC_ADDRESS

No

Formato para direcciones postales.

LC_COLLATE

Ordenación alfabética

LC_CTYPE

Qué caracteres son considerados letras, etc.

LC_IDENTIFICATION

No

?

LC_MEASUREMENT

No

Indica el sistema de medidas usado (métrico, etc)

LC_MESSAGES

En qué lengua se comunicarán los programas con el usuario.

LC_MONETARY

Formato para fomrato numérico de dinero.

LC_NAME

No

Formato para nombres de personas?

LC_NUMERIC

Formato numérico (separador de miles, decimales, etc.)

LC_PAPER

No

Tamaño del papel.

LC_TELEPHONE

No

Formato de los números telefónicos.

LC_TIME

Formato de hora y fecha.

LANGUAGE puede contener una lista de valores separados por dos puntos, que define la preferencia idiomática del usuario. Por ejemplo:

LANGUAGE="es_ES:es_AR:es:en_US:en"

indica que se prefiere el español de España, sobre el de Argentina, sobre el español a secas, sobre el inglés de EEUU y sobre el inglés. De este modo, las aplicaciones que usan la biblioteca gettext pueden seleccionar la traducción que más se acerque a nuestra preferida.

Por otro lado, el resto de las variables funcionan de esta forma: el valor de LANG afecta a todos los aspectos, de modo que todas las variables LC_* adoptarán su valor, si no han sido específicamente definido un valor para alguna de ellas. Por su parte, LC_ALL sobrescribe cualquier valor de otra variable, por lo que si se define un valor para ella, todas las variables LC_* adoptarán su valor. Probemos gracias al siguiente comando:

locale

Devuelve información sobre el sistema de localización. Su uso más simple es preguntar cuál es el lenguaje que hay definido en la shell:

$ locale
LANG=es_ES.UTF-8
LANGUAGE=
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="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"
LC_ALL=

O sea, español de España (es_ES) codificado en UTF-8. La razón de que esto sea así es que hay definida solamente la variable LANG:

$ echo $LANG
es_ES.UTF-8

y ninguna de las otras, por lo que todas las variables que controlan aspectos particulares adoptan su valor.

Para saber qué otros valores podemos asignar, basta con:

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

Los valores C y POSIX indican que la aplicación use el idioma que tiene definido por defecto (usualmente inglés de Estados Unidos). Comprobemos ahora qué las variables determinan su valor (y por tanto, el idioma) según las reglas que dimos antes:

$ LC_MESSAGES=C locale
LANG=es_ES.UTF-8
LANGUAGE=
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES=C
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"
LC_ALL=

Como se ve, al definir en particular la variable LC_MESSAGES, se ha sobrescrito el valor determinado por LANG. Si, además, fijamos el valor de LC_ALL, veremos que todas las variables particulares adoptan su valor:

$  LC_MESSAGES=C LC_ALL=POSIX locale
LANG=es_ES.UTF-8
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=POSIX

En debian se configura sólo una variable LANG global dentro de /etc/default/locale, de modo que si se quiere cambiar su valor, basta comn editar del fichero. No obstante, el mejor modo de retocar la configuración de las [variables] locales es ejecutar:

# dpkg-reconfigure locales

Que de forma sencilla nos pedirá cuáles son las lenguas para las que deseamos tener soporte y cuál es la que queremos definir como predeterminada.

Obviamente, si algún usuario desea una configuración distinta a la predeterminada, no tiene más que definir las variables locales que desee oportunas en algún fichero que lea la shell al cargarse.

Advertencia

Es muy recomendable que el administrador tenga definida su variable LC_MESSAGES a C, para que los futuros mensajes de error que devuelvan las aplicaciones estén escritos en inglés, ya que es más fácil encontrar una referencia a ese error en internet en este idioma.

Notas al pie

1

Indica si la variable esta definida en el estándar POSIX. Las que no están definidas en él son extensiones de la librería de C del proyecto GNU.