Configurar Unicode en Linux

De WiChiron
Saltar a: navegación, buscar

En las siguientes líneas vamos a ver el estado del uso de UTF-8 en máquinas que funcionen bajo Linux (especialmente Debian, en su distribución “Ubuntu”). Para que la codificación se realice con éxito deberan cumplirse esta serie de condiciones:



  1. Las aplicaciones deben ser capaces de aceptar UTF-8 en strings y archivos, así como no deben de tener problemas de mostrarlas en pantalla.
  2. Debería ser fácil la configuración del teclado para la utilización de diversos lenguajes.
  3. Debería no tener problemas a la hora de imprimir documentos, páginas web y e-mails codificados en UTF-8
  4. Copiar (desde cualquier ventana de la pantalla) y pegar debe funcionar en cualquier aplicación.



 
En todas estas, MS Windows ha demostrado durante años un buen comportamiento. Si se instalan las fuentas correctas, además del “Global IME” de Microsoft para los dispositivos de entrada, el computador se convierte en una máquina plurilingue.

Ubuntu actualmente incluye bastantes fuentes “exóticas” por definición; En Debian también se pueden instalar paquetes por separado para la utilización de fuentes no occidentales.

Las distribuciones más modernas de Linux, se pueden considerar multilingües, gracias a la compatibilidad con UTF-8. Aunque hay que tener en cuanta que todavía hoy muchas distribuciones no utilizan el UTF-8 por defecto, sino que hay que “configurarlo” posteriormente. Por ejemplo el Ubuntu Hardy trabaja perfectamente bajo una codificación UTF-8. Siempre hay que tener en cuenta que para trabajar en el escritorio con fuentes “exóticas” habrá que poseer la fuente apropiada.


Basicamente cuando hablamos de compatibilidad con UTF-8, nos referimos a varios niveles:

  • Terminal o Consola: GUI gráficas, como Xterm o el Gnome-Terminal, que emulan en un escritorio Xwindows (tipo Gnome o KDE) una terminal o consola de línea de comandos propias de linux.
  •  Xwindow: tipo gnome o kde
  •  Aplicaciones: especialmente procesadores de texto y otras herramientas ofimática, tipo openoffice
  •  Navegadores web y otras aplicaciones


En cuanto a la consola, podemos que aún existen aun una serie de problemas por resolver. v.gr. Scripts complicados ('Complex Text Layout') como el Devanāgarī, han desaparecido.


Xterm, y la mayor parte de las utilidades de texto, como less, ahora soportan perfectamente UTF-8 (aunque hay algunas excepciones). Aparte del xterm y otro pequeño grupo de emuladores (mlterm, konsole, urxvt, ...) no tienen problemas con el UTF-8 (otros sí, como aterm, Eterm). Gnome-Terminal al estar basado en GTK+ acepta perfectamente UTF-8.

La opción de copiar y pegar trabaja perfectamente “desde cualquier sitio a cualquire sitio” en todas las distribuciones posteriores al 2004.


La impresión UTF-8 no es ningún problema en versiones modernas de Linux; no obstante, si la distribución falla con un texto puro UTF-8, puede ser útil leer la sección acerca de paps). La impresión desde cualquier producto de Mozilla, puede ser problemática, pero estas dificultades se suponen que desapareceran tras Firefox 3.0.

El MS Global IME se puede considerar como un teclado multilingual, así como las tres opciones para Linux (uim, scim y IIIMF, que son las aplicaciones propias para los sistemas de entrada en Linux). De esta forma el famoso problema “multilingual input problem” en Linux se puede considerar resuelto. En este documento se van a describir el funcionamiento y la configuración de los sistemas uim y scim.



Establecer UTF-8 en la Consola



Hay muy poca documentación para el uso de Unicode en la consola. Hay un comando denominado unicode_start, cuya descripción en la página man es deImage:Unicode_start.png

Pero de hecho, parece que este comando (que se puede parar con un “unicode_stop”) sólo aplica el UTF-8 sobre la pantalla. Por ejemplo, el carácter é (=hex C3 A9) se muestra correctamente sobre la pantalla (si se tiene activada esta opción). Pero la “escritura” de é no funciona. Ya que parece que sólo trabaja con 256 o 512 caracteres propios del Unicode

El asunto de “una consola que soporte Unicode” sale continuamente en las listas de correo. Esto parece que da bastante trabajo, ya que los cambios importantes en el kernel son necesarios. Aunque simplemente parece que este trabajo no merece la pena, Así no se debe esperar una consola en UTF-8, y es mejor trabajar sobre emuladores como Xterm o Gnome-Terminal. Este tipo de emuladores requieren "framebuffer"

La opinión general es: la consola actual de Linux es un terminal. Se podría controlar un sistema linux por medio de una terminal “tonta” conectado a un puerto en serie. Pero al fin y al cabo la consola intenta proporcionar el acceso de “emergencia” a los servicios del kernel, y por tanto no se debería esperar nada más.



PROBLEMA DEL "COMPLEX TEXT LAYOUT"

Muchas letras con diacríticos (“acentos”) aparecen en la tabla del unicode. Por ejemplo la a con acento agudo, "á", cuyo número es 0xE1
El editor Mined facilita la introdución de estos elementos diacríticos, y muestra ellos como una “combinación” de caracteres.
La especificación Unicode posee esta “combinación de diacríticos” (registrada entre los números 0x300 y 0x36F). Estos, cuando aparece un diacrítico tras un carácter ordinarío, debería producirse la combinación para que el resultado no fueran dos caracteres, sino un sólo “glifo”. Así /a/, 0x61, más un acento grave, 0x301, debería aparecer como /á/, y no como á.
Esta norma (registrada en el estardar Unicode, punto 2.10) define que es lo que realmente debe ser. Así, por ejemplo, si una letra fuera seguida de dos acentos, el primer acento debería ser mostrado encima de la letra, y el segundo sobre el anterior. De este modo, cualquier carácter Unicode, en teoría, podría ser adornado con cualquier número de acentos o elementos diacríticos, en su margen superior, estuviera o no registrado el los alfabetos locales, e independientemente que estuviera registrado en el mapa de caracteres Unicode.
Para que funcione esta “combinación de diacríticos” (tanto en el monitor como en la impresión del texto) tanto la “fuente” como el software deben tener una serie de requerimientos específicos. Este tipo de “combinación de diacríticos” es lo que se denomína un “Complex Text Layout”. Las fuentes para un “real” CTL deben incluir una serie de mecanismos que permitan la “muestra” de estos caracteres complejos, como suele ocurrir en las lenguas de la india; a pesar que las combinación de diacrítico en la mayoría de lenguas occidentales esté establecida.



CONFIGURACIÓN DEL UNICODE


Cada distribución de Linux, desafortunadamente, tiene sus propios medios específicos para definir el Unicode como predefinido. Existe diversos métodos para su configuración “out of the box”. Incluso parece que la distribución Etch  de Debian también lo hace (versión estable de julio del 2008). Aunque aquí vamos a trabajar con Ubuntu Hardy y Lliurex
La definición de idioma aparece normalmente en este formato en dos archivos: /etc/environment y /etc/defaults/locale.

LANG=en_GB.UTF-8 

Para el español, sólo hay que cambiar la definición de LANG a es_ES.UTF-8 editando los archivos mencionados.

 

Paso 1: reconocer el idioma predefinido


  • para saber el idioma predefinido, sólo tendremos que introducir en la consola "locale", el resultado será algo parecido a esto, en Ubuntu:

LANG=es_ES.UTF-8
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=

  • el valor del LANG es una varible denominada “locale” en el sistema. Sólo se pueden selecionar aquellos valores que están “activados” en tu sistema; se pueden comprobar los idiomas locales activados con la edición de /etc/locale.  Se pueden comprobar todos los idiomas locales por medio de “locale -a”. No podremos cambiar de idioma si no estuviera el idioma deseado en la lista de locale -a.
  • La variable está compuesta por dos elementos o indicadores"es_ES.UTF-8". El primero marca el idioma del SO y el segundo, después del punto ( UTF-8) establece la utilización del Unicode como codificacor de caracteres.El indicador de idioma “es_ES se utiliza como una propiedad que permite al los diferentes progamas reconocer el idioma predefinido del usuario y mostrar las fechas, números y man pages en el lenguaje correcto y en su formato. Además permite al conjunto de software Mozilla establecer el idioma predeterminado para la navegación Web.
  • Todas las variables que empiezan por LC_....., son variables de entorno. Estos son 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  categorías, en resumen estas son las más importantes
Categoría  Descripción

LC_COLLATE


LC_CTYPE


LC_MONETARY


LC_NUMERC


ILC_TIME


LC_MESSAGES

Controla la forma de clasificar: que letras van antes y después de otras en orden alfabético.


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.


Describe el formato preferido de información de la moneda, como qué caracter se usa como punto decimal y cómo indicar importes negativos.


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.


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


 Esta categoría contiene mensajes de texto usados por aplicaciones que necesitan desplegar información en múltiples lenguajes.

(Cuadro tomado de Misdocumentos)

  • Para los lenguajes Occidentales, como en_GB (inglés) o es_ES (español), se utilizarán fuentes occidentales. Aunque no parece que esta definición de “occidental” en Mozilla haga mucha distición, porque sobre una definición DE.UTF-8 seguirá utilizando como equivalente en_GB.UTF-8.

Posible problema de memoria con UTF-8 local
Para la modificación del idioma del SO se depende de la aplicación “localedef”, este es el cual consume los recursos de memoria del UTF-8 local. Ningún otro programa en Linux system es tan devorador como este “localedef”; Mozilla y Openoffice no consumen recursos en comparación con este. Necesitarás al menos 100 Mb de memoria libre (esto es tanto en RAM como en swap) para que pueda funcionar.

Si experimentas problemas (como por ejemplo ve el mensaje que “localedef” ha sido “killed” por el kernel), se debe (temporalmente) crear un archivo memoria extra, por ejemplo con un archivo swap o de intercambio. Google da muchos enlaces que explican cómo hacerlo.

Después de que se haya configurado con éxito el idioma local, el archivo de intercambio (archivo swap) puede despreciarse (“swapoff”) y eliminarlo. Es necesario reiniciar el sistema, porque la memoria Ram no está aún libre del “localedef”, y hay un grupo de cosas que pueden estar equivocados. Este problema aún no ha sido arreglado, pero los gurus ............

  • La mayoría de los programas trabajan bien en marco UTF-8, pero ocasionalmente puedes encontrar uno que no (un ejemplo es Texmacs). Estos programas “problemáticos” poco a poco se van a adaptando al uso de UTF-8; un ejemplo, el administrador de archivos Mc (“midnight Commander” no lo hizo hasta el 2006). A pesar de esto, puede haber problemas incluso en el mismo man, Las utilidades estándar parece no tener actualmente problema; ellas identifican (a través de “locale”) que están en un entorno UTF-8.

Paso 2 Establecer el idioma predefinido

Para establecer el idioma predefinido, siguiendo esta página, debemos hacer las siguientes cosas:

  1. Editar los archivos (con gedit u otro editor en la consola):

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

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" LANGUAGE="en_US:en" LANG="en_US.UTF-8"

/etc/default/locale

LANG="en_US.UTF-8" LANGUAGE="en_GB:en"

estos tres archivos pertenecen a una configuración en inglés americano, Cambiar la configuración sólamente consistería en sustituir las siguientes cadenas

  • en_US.UTF-8 UTF-8 > es_ES.UTF-8 UTF-8
  • LANGUAGE="en_US:en" > LANGUAGE="es_ES.UTF-8"
  • LANG="en_US.UTF-8" > LANG="es_ES.UTF-8"

Si quisieramos poner en griego moderno todo el sistema, sólo deberíamos introducir la cadena el_GR". Recordar siempre comprobar si tenemos instalado el idioma, antes de hacer los cambios en estos tres archivos, por medio de locale -a

Una opción bastante interesane, es dejar el idioma inglés por si alguna aplicación no tuviera el español configurado.
E incluso añadirle el griego. De estar forma tendríamos una consola preparada para tres idiomas: español, griego y inglés.
Los archivos quedarían de la siguiente forma:
/var/lib/locales/supported.d/local
es_ES.UTF-8 UTF-8
en_US.UTF-8 UTF-8
el_GR.UTF-8 UTF-8

/etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANGUAGE="es_ES:es:el_GB:el:en_GB:en"
LANG="es_ES.UTF-8"

/etc/default/locale
LANG="es_ES.UTF-8"
LANGUAGE="es_ES:es:el_GR:el:en_GB:en"
  1. Ejecutamos $ sudo dpkg-reconfigure locales para que se reconfiguren los paquetes locales
  1. Comprobamos que la nueva configuración funciona con éxito a través de env en la consola de la termina.