lunes, 19 de enero de 2009

El supermanual de HAL

El día pasado nos quedamos con una buena lista de tareas pendientes. Recordemos que el objetivo último es modificar a HAL para que nos responda en nuestra lengua, si es que no lo hace ya. Vimos que, para ello, es necesario modificar las variables que definen el entorno local, cuyos nombres ---que aparecen como primer campo al preguntar a HAL por sus valores actuales--- son los siguientes:


LANG
LANGUAGE
LC_CTYPE
LC_NUMERIC
LC_TIME
LC_COLLATE
LC_MONETARY
LC_MESSAGES
LC_PAPER
LC_NAME
LC_ADDRESS
LC_TELEPHONE
LC_MEASUREMENT
LC_IDENTIFICATION
LC_ALL


¿Qué variables debemos cambiar? Si solo algunas, ¿cuáles?

Quizá, pidiendo ayuda a HAL sobre la orden locale, obtengamos alguna pista:

locale --help

La respuesta no parece aclararnos nada:


Usage: locale [OPTION...] NAME
or: locale [OPTION...] [-a|-m]
Get locale-specific information.

System information:
-a, --all-locales Write names of available locales
-m, --charmaps Write names of available charmaps

Modify output format:
-c, --category-name Write names of selected categories
-k, --keyword-name Write names of selected keywords
-v, --verbose Print more information

-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version


Ahora sí que estamos estancados. Seguimos con el inglés de las narices y, encima, no parece entender nuestra solicitud de ayuda.

No hay que desanimarse, seguro que HAL tiene en algún lugar de sus neuronas electrónicas la información que deseamos. Tiene que tener, como todo aparato de este mundo ---hasta mi móvil lo tiene--- una guía o manual de usuario. ¿Y si probamos precisamente eso, con lo de "manual"? Vale. Después de varios intentos con esa palabra y sus posibles abreviaturas, daremos con la pregunta adecuada:

man

Y HAL tiene la delicadeza de decirnos lo siguiente:

What manual page do you want?

O sea, que, efectivamente, HAL tiene un manual. Pero, como el manual tiene varias páginas, será necesario especificar cuál nos interesa. Ya sabemos que estas especificaciones se realizan con argumentos que se añaden a la consulta genérica. El argumento tiene que ser, en este caso, la orden sobre la cual nos interesa obtener la información que consta en el manual. Por tanto:

man locale

¡Eureka! HAL nos presenta la página del manual sobre locale.

Vaya, una larga página ---que omito escribir, justo por larga. Tan larga que hay que usar la tecla de espacio para llegar hasta su final. Pero después de un esfuerzo ímprobo, que pone a prueba nuestro habilidad con el inglés, sospechamos que la variable que tiene que ver con el formato de las respuestas de HAL es LC_MESSAGES.

¿Y si definimos expresamente el valor de esa variable justo antes de preguntarle a HAL cualquier cosa? Habrá que seguir, claro, la convención explicada el otro día, es decir, que el valor sea es_ES.UTF-8. Por probar no se pierde nada. Pidamos a HAL, por ejemplo, que nos dé la página de manual para la propia orden man, pero en español:

LC_MESSAGES=es_ES.UTF-8 man man

Funciona, ¿verdad? [ Si sigue sin funcionar es que tu distribución no ha incluido las páginas de manual traducidas. Otro día veremos cómo instalar esas traducciones o cualquier otra cosa en tu HAL particular. Hasta entonces, tendrás que seguir con el inglés. ]

Lo malo de este camino es que nos veremos obligados a comenzar todas nuestras frases con la definición de variable indicada, algo muy poco conveniente. Queda, pues, trabajo por delante.

De momento, volvamos a la página de manual de man y echémosle un vistazo. Basta con que leamos la primera parte de la descripción y los ejemplos, particularmente el segundo, que vamos a utilizar en breve. Tras este vistazo aprendemos:

  • Que las páginas de manual están divididas en secciones.

  • Que, si queremos la página sobre una orden dentro de una sección particular, el número de sección se especifica como argumento antes que la orden (por ejemplo, man 7 locale).

  • Y que, si de una misma orden hay páginas en varias secciones, las obtendremos todas con la opción -a (por ejemplo, man -a locale).



Recapitulemos. Hemos acertado al pensar que la variable de entorno LC_MESSAGES es la responsable de que los mensajes nos aparezcan en nuestro idioma. Pero, ¿qué hay del resto de las variables?

Solicitemos a HAL todas las páginas de manual que tenga sobre locale, a ver si descubrimos una pista:

man -a locale

HAL nos muestra la primera de esas páginas en el idioma que esté establecido por defecto. Pero en cualquier momento podemos ir a la siguiente, normalmente tecleando :n (de next), o q (de quit) seguido de Enter. La siguiente página será o bien la misma que la anterior, pero en otro u otros idiomas ---dependiendo de nuestra instalación---, o bien una página de otra sección. Si navegamos por todas estas páginas daremos con una que lleva el encabezado 'LOCALE(7)' en la parte superior izquierda. Esa es la que nos interesa, porque es que la que contiene traducida la información que necesitamos. Podría haber llegado a ella de una manera más directa:

HAL, muéstrame en mi idioma la página de manual sobre la orden locale correspondiente a la sección 7

O, lo que, como hemos visto, es lo mismo que:

LC_MESSAGES=es_ES.UTF-8 man 7 locale

Bien, si leemos con relativa atención esta página, sin agobiarnos con los párrafos más técnicos, llegaremos a la conclusión de que basta con modificar las variables LANG, LANGUAGE y LC_ALL para adaptar nuestro entorno a la lengua y las convenciones de nuestra comunidad lingüística. ¡Objetivo cumplido! ¡Primera tarea realizada!


Resumen de lo aprendido:

  • HAL contiene un manual completísimo al que se accede a través de la orden man.

  • La orden locale nos proporciona una lista con el valor actual de las variables de nuestro entorno local.

  • La variable de entorno que define el idioma en que aparecerán los mensajes emitidos por HAL es LC_MESSAGES.

  • Se pueden definir variables de entorno inmediatamente antes de solicitar la ejecución de una orden para que afecten temporalmente a dicha orden.

  • Las variables de entorno LANG, LANGUAGE y LC_ALL adaptan nuestro entorno a nuestra comunidad lingüística.

No hay comentarios:

Publicar un comentario