Localización e internacionalización
Conceptos Claves
- Configuración de locale
- Configuración de zonas horarias
Términos y utilidades
- /etc/timezone
- /etc/localtime
- /usr/share/zoneinfo
- Environment variables
- /usr/bin/locale
- tzselect
- tzconfig
- date
- iconv
- UTF-8
- ISO-8859
- ASCII
- Unicode
Introducción
La internacionalización es el proceso de diseñar software de manera tal que pueda adaptarse a diferentes idiomas y regiones sin la necesidad de realizar cambios de ingeniería ni en el código. La localización es el proceso de adaptar el software para una región específica mediante la adición de componentes específicos de un locale y la traducción de los textos.
Linux utiliza un vinculo simbólico llamado /etc/localtime para determinar la zona horaria. Este vinculo apunta a algún archivo dentro del directorio /usr/share/zoneinfo que corresponde a alguna zona horaria especifica. Generalmente el proceso de determinar la zona horaria se realiza durante la instalación, en el caso que se quiera cambiar esta configuración. Se puede ejecutar el comando tzselect.
Si queremos saber en que zona horaria estamos podemos usar el siguiente comando:
$ date –u
locale
Un locale es un conjunto de parámetros que define el idioma, país y cualquier otra preferencia especial que el usuario desee ver en su interfaz de usuario.
LANG: Define todos los parámetros de locale de una sola vez, permite una posterior adaptación individual por medio de los locales LC_* .
LC_COLLATE: Define el orden alfabético de las cadenas de texto.
LC_CTYPE: Define como se manejan los caracteres. Determina que caracteres serán vistos como alfabéticos, numéricos, etc. Si aplica, también define que conjunto de caracteres usar.
LC_MESSAGES: Esto define la localización de los programas que utilizan una esquema de mensajes basado en localización. Esto incluye la gran mayoría de los programas GNU.
LC_MONETARY: Define las unidades monetarias y el formato para los números monetarios.
LC_NUMERIC: Define el formato para los números no monetarios. Por ejemplo, el separador de miles.
LC_TIME: Define el formato para la fecha y la hora.
LC_PAPER: Define el tamaño predeterminado del papel.
LC_ALL: Es una variable especial para sobrescribir todos los parámetros.
Cambiar el locale
Para cambiar nuestro locale, primero debemos asegurarnos que este disponible el locale al cual queremos cambiar. Para ello, podemos obtener un listado completo de locales con el comando locale –a:
$ locale –a
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
En el caso de que se requieran algún local que no este instalado, generalmente existen paquetes que realizan la instalación automáticamente. Estos paquetes, generalmente llevan la forma language-support-??, donde ?? representa dos caracteres correspondientes al código del lenguaje. Luego de instalar algún paquete de soporte para algún lenguaje nuevo, podemos establecer el locale nuevo, exportando el valor de la variable de entorno.
$ export LANG=es_AR.utf8
Como resultado de esto, todas las variables de locale serán cambiadas para nuestra sesión actual. Este cambio afectara solo a nuestro shell y a los programas que el mismo origine. No se verán cambios en los programas que ya se encuentren en ejecución ni a los que se inicien desde otro shell.
Para realizar estos cambios de manera permanente, habrá que realizar ajustes en los scripts de inicio de bash, tales como -/.bashrc o /etc/profile.
Codificación de caracteres
La codificación de caracteres es el método que permite convertir un carácter de algún alfabeto, en algún código binario y viceversa. A lo largo de la historia de la computación surgieron varios códigos de caracteres, algunos de los que se utilizan hoy en día son:
ASCII: es un código de caracteres basado en el alfabeto latino, tal como se usa en inglés, incluyendo signos de puntuación. Es el método de codificación mas antiguo y primitivo. El código ASCII utiliza 7 bits para representar los caracteres.
ISO 8859-1: Es una extensión del código ASCII, incluye los caracteres diacríticos (como letras acentuadas, ñ, ç), y letras especiales (como ß, Ø).
Unicode: Es un formato de codificación que permite la representación de cualquier carácter en la gran mayoría de las lenguas conocidas, incluso aquellas que ya no se usan cotidianamente.
El término Unicode proviene de los tres objetivos perseguidos: universalidad, uniformidad y unicidad.
UTF-8: Es una de las implementaciones del formato Unicode. Es el formato de codificación de caracteres estándar para la World Wide Web y la mayoría de las aplicaciones.
Convertir archivos entre distintos formatos de codificación
Para realizar esta tarea podemos usar el comando iconv:
Iconv –f formato [-t formato] [archivo_entrada]
Las opciones f y t representan los formatos de codificación de entrada y de salida. Si se omite el formato de codificación de salida, iconv utiliza el que este como defecto en las configuraciones de locale.