Locales en Ubuntu

Introducción

El esfuerzo por internacionalizar las aplicaciones informáticas pasa por adaptarse al juego de caracteres que caracterizan cada idioma, no solo para poder representarlas en pantalla, sino también para poder escribir usando el juego de caracteres particular de ese idioma.

En lugar de usar la palabra internacionalization, se ha elegido usar un numerónimo, osea, una palabra que está compuesta por números y letras. La palabra elegida es i18n, que esá compuesta por la primera I y la última N de la palabra “internacionalization” y en medio el número de caracteres que hemos quitado, 18. De la misma forma, la palabra Localization se ha abreviado usando su numerónimo: L10n. Como le ha gustado a la gente esta nueva forma de abreviar palabras, no es raro ver escrito g11n por globalization, o p13n por personalization, o a11y por accessibility.

En linux, la internacionalización, o localización (elija usted) se ha implementado mediante la definición de locales. A lo largo de este documento usaré la palabra locale en su forma inglesa, ya que al ser la forma en la que aparece al configurar los equipos se ha constituido en parte de la jerga informática.

Un locale, o deberíamos decir localidad, es un grupo de parámetros que describe el formato de texto y modismos de lenguaje en una area en particular en el mundo. Dichos parámetros están divididos en seis categorías:


Categoría Descripción
LC_COLLATE Controla la forma de clasificar: que letras van antes y después de otras en orden alfabético.
LC_CTYPE Controla la correspondencia entre letras mayúsculas y minúsculas además de definir los componentes de las diferentes clases de caracteres, como los caracteres alfanuméricos.
LC_MONETARY Describe el formato preferido de información de la moneda, como qué caracter se usa como punto decimal y cómo indicar importes negativos.
LC_NUMERIC Describe la información del formato numérico preferido, como la forma de agrupar números y que caracter se usa como separador de miles.
LC_TIME Describe la información del formato preferido de hora y fecha, así como los nombres de los meses y días, y si se usa el formato de 12 o 24 horas
LC_MESSAGES Esta categoría contiene mensajes de texto usados por aplicaciones que necesitan desplegar información en múltiples lenguajes.



Juegos de caracteres

UTF-8

Es una norma de transmisión para caracteres codificados en Unicode. Cada caracter es transmitido usando entre uno y cuatro octetos. Este sistema es compatible con ASCII ya que los primeros 127 caracteres (7 bits) se codifican igual, y es solamente a partir del caracter 128 cuando empiezan las diferencias.

ISO-8859-15

También conocido como Latin-9, es un estándar de codificación de caracteres. Codifica los caracteres con 8 bits y puede usarse para representar el alfabeto y otros caracteres importantes para almacenar textos en inglés, francés, alemán, español y portugués (entre otros idiomas de Europa occidental) en ordenadores.

Se diferencia de ISO-8859-1 en 8 caracteres, entre ellos el 0xA4, que en ISO-8859-15 es el símbolo del euro (€).

Todos los caracteres imprimibles tanto de ISO 8859-1 como de ISO 8859-15 se encuentran también en Windows-1252.



Variables de entorno

Ubuntu usa UTF-8 como juego de caracteres predeterminado. Para ello viene preconfigurado para usar el locale “es_ES.UTF-8”, el cual se define en la variable de entorno LANG del fichero de configuración /etc/default/locale.

Hay cierta confusión con las diversas variables de entorno que definen el idioma que quiere usar el usuario para escribir. Esta es una lista de todas las variables que es posible definir para especificar un detrrminado locale:


Variable Descripción
LANG En ausencia de variables LC_*, esta variable determina la categoría de locale para la codificación de caracteres. Por ejemplo, las aplicaciones usan esta variable para determinar qué lenguaje usar en los mensajes al usuario, formatos de fechas, etc.
LC_ALL Esta variable determina el valor para todas las categorías de locales. El valor de LC_ALL tiene preferencia sobre las variables de categorías específicas de locales, que son todas las que comienzan por LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) y también sobre la variable de entorno LANG.
LANGUAGE Es una extensión de GNU. En esta variable se define una lista de prioridades de locales separadas por comas. Es una alternativa a la variable LC_MESSAGES de POSIX, y la usan solo las aplicaciones al solicitar la entrada de texto al usuario.

El siguiente documento explica todas las variables de entorno para sistemas “internacionalizados”: http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html#tag_08_02

Al instalar Ubuntu, la única variable que nos encontramos definida es LANG:

$ env
LANG=es_ES.UTF-8

La razón de que LANG sea la única variable definida es que así es más sencillo para el usuario definir excepciones mediante las variables LC_*, ya que cualquiera de ellas anula el efecto de LANG. Por ejemplo, si el usuario define en su perfil la variable LC_ALL, puede usar un locale distinto del que estén usando otros usuarios del sistema. Por supuesto, para que eso ocurra, dicho locale también debe de estar definido.

Ficheros de configuración

Si queremos cambiar UTF-8 por ISO-8859-15 como codificación por defecto para el sistema, debemos modificar los siguientes archivos:

/var/lib/locales/supported.d/local

es_ES ISO-8859-1
es_ES@euro ISO-8859-15
es_ES.UTF-8 UTF-8
es_ES.UTF-8@euro UTF-8
en_US.UTF-8 UTF-8

/etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games"
LC_TYPE=es_ES@euro
LC_ALL=es_ES@euro
LANG="es_ES@euro"
LANGUAGE="es_ES:es:en_US:en"

/etc/default/locale

LANG="es_ES@euro"


Reconfiguramos los locales

Una vez definidos los locales que queremos usar, le decimos al sistema que los use:

$ sudo dpkg-reconfigure locales
Generating locales...
  en_US.UTF-8... up-to-date
  es_ES.ISO-8859-15@euro... up-to-date
  es_ES.ISO-8859-1... up-to-date
  es_ES.UTF-8@euro... up-to-date
  es_ES.UTF-8... up-to-date
Generation complete.

A partir de este momento, las nuevas sesiones usarán ISO-8859-15 como codificación por defecto en lugar de UTF-8.

$ env
LC_ALL=es_ES@euro
LC_TYPE=es_ES@euro
LANG=es_ES@euro
LANGUAGE=es_ES:es:en_US:en

<fbc>


QR Code
QR Code Locales en Ubuntu (generated for current page)