Como bloguear en más de un idioma

La blogosfera española está triste. ¿Qué tendrá la blogosfera? El idioma es un accidente del destino, la traducción automática está por todas partes y la importancia relativa de la lengua del creador de contenidos disminuye cada día. Ahora bien, verter información de una lengua a otra puede ser aún una tarea que requiera de cerebros humanos, como vimos en la anterior entrada.

Para asistir en esa tarea, he preparado un widget de Blogger que permite escribir entradas en más de un idioma. Funciona como una negociación de contenido en servidor, pero en el lado del cliente. Además, usa esas técnicas de manipulación DOM que tan en boga están con la Web 2.0.

Un poquito acerca de su uso:

  1. Primero, tienes que añadir el widget a tu bitácora. Puedes usar el botón que aparece junto al combo de selección de idioma. Si no estás en Blogger, bájate el script langsupport.js, y despliégalo en tu ubicación favorita (puede ir incluido en tu plantilla o en el código HTML de la página que lo use con una marca <script>, es pequeño, y más aún si lo pasas por JS Minifier). Al menos tendrás que eliminar la línea marcada como Only needed when code is running inside a Blogger widget para que funcione fuera de Blogger sin problemas.
  2. Si estás fuera de Blogger, tendrás que añadir también un “ancla” para que el código Javascript sepa dónde colocar el combo selector de idiomas. Eso tiene esta pinta:
    <span id="__langSupport__"></span>
  3. Denota tu contenido con marcas HTML que usen el atributo lang, usando nombres de idioma según el estándar ISO 639-1 (en teoría podrías poner cualquier cosa, pero entonces la funcionalidad de idioma por defecto se vería afectada). Por ejemplo:
    <p lang="en">This paragraph is in English.</p>
    <p lang="es">Este párrafo está en español.</p>
  4. ¡Disfruta!

Algunas notas importantes:

  • Aquellos elementos HTML que no estén marcados (los que no tengan atributo lang) no serán modificados.
  • Cualquier marca que lleve un idioma que no esté seleccionado ocultará todos sus contenidos, incluso si otra marca anidada lleva el idioma actual. Para evitar problemas, no anides marcas con diferentes valores del atributo lang.
  • Si no hay atributos lang en todo el documento, el selector de idioma no aparecerá.
  • El primer idioma seleccionado depende del idioma por defecto del sistema operativo. Si no hay contenido para ese idioma en la página, se selecciona un idioma por defecto (el inglés). Si no hay contenido en inglés, se muestra el contenido del primer idioma disponible, en orden alfabético.
  • Desafortunadamente, la configuración de idioma preferido por el navegador no está disponible para Javascript (sólo se usa en la negociación de contenidos con servidores que dispongan de esa posibilidad). El idioma por defecto es el del sistema operativo.
  • He probado esto en Firefox 2. Si también funciona en IE, pues vale.

Hipertrofias del Javascript

Una consecuencia interesante de lo que se está dando en llamar Web 2.0 es que la interactividad que se espera de las páginas en la red comporta un engrosamiento de los componentes de apoyo. Es cierto que conforme los navegadores cumplen más y más con los estándares del W3C (pero podéis probar el test ACID2 para ver lo lejos que estáis) las páginas se transforman en aplicaciones.

El sueño del cliente ligero, que sólo requiere de un navegador para realizar cualquier tarea, está a punto de hacerse realidad. No sólo por los esfuerzos de Google por crear un nuevo monopolio (¿a que tiene gracia? Microsoft acusando a Google de monopolista…) Existen muchos jugadores que persiguen lo que unos anglófonos, en la más acendrada tradición de los padres del Mitsubishi Pajero y el Nissan Moco, han llamado WebOS (Web Operating System, claro). Sólo un par de ejemplos de entre lo más destacado: YouOS y eyeOS.

Sinceramente, me dan sudores fríos sólo con pensar en el código Javascript que hay detrás de esos ímprobos esfuerzos. Al navegador también, viendo los tiempos de respuesta de las “aplicaciones”. Me río de los applets. Pero lo que más me llama la atención es la autorreferencia implícita en todo sistema operativo web: naturalmente, todos tienen un navegador. No importa que (obviamente) ya tengas uno. No me resisto a la tentación de abrir el navegador, visitar desde él la página del “sistema operativo”, abrir el navegador… It’s turtles all the way down.

Evidentemente, la utilidad principal de estos WebOS es la de servir como plataformas para quioscos en sitios públicos. La duda que me queda es si merecen la pena, existiendo distribuciones de Linux con gestores de ventanas perfectamente aptos para la tarea. En cualquier caso, parece una tendencia natural del Homo sapiens informaticus ampliar cualquier programa hasta que se transforma no ya en un cliente de correo electrónico, como afirma la tradición, sino en todo un sistema operativo.

Matemáticas

Stephen Hawking afirmó en su Historia del tiempo que:

“Alguien me dijo que cada ecuación que incluyera en el libro dividiría por dos las ventas, de modo que resolví no introducir ninguna. Pese a todo, sí que terminé incluyendo una: la famosa E = mc2 de Einstein. Espero que eso no haga huir a la mitad de mis lectores potenciales.”

Yo no tengo lectores, así que me puedo permitir incluir tantas matemáticas como quiera. Incluso pueden ser erróneas. Pero me sirven para hacerme ilusiones. Ay, la vanidad.

El caso es que incluir una cita matemática en una bitácora no es fácil. La solución más evidente es utilizar algún programa externo para componer ecuaciones (como OpenOffice.org Math, que viene de paquete con OpenOffice.org). Luego, se puede sacar una captura de pantalla de la ecuación, recortarla y redimensionarla, para finalmente subirla al blog como una imagen.

Pedestre. Incómodo. Primitivo. Para un ingeniero, el mundo es una colección de juguetes sin suficientes prestaciones: vamos a añadirle alguna a nuestra bitácora. Necesitaremos:

  1. Una versión reciente de Firefox. Esta receta se puede hacer con Internet Explorer, pero no sale tan rica (luego diré algo más al respecto).
  2. Un paquete de fuentes para matemáticas como éste. Vienen instaladores para las principales plataformas.
  3. ASCIIMathML. Un script capaz de transformar para una página web texto escrito con una sintaxis sencilla en MathML.

Firefox viene con soporte de MathML de serie, y sólo se necesita instalar el paquete de fuentes matemáticas del punto 2. Para Internet Explorer, es necesario utilizar un plugin llamado MathPlayer (funciona a partir de IE6), pero a cambio, no será necesario el paquete de fuentes.

ASCIIMathML está desarrollado en Javascript, y para utilizarlo basta con incluir en la página este código (en cualquier lugar):

<script type="text/javascript" src="ASCIIMathML.js"></script>

Naturalmente, es necesario cambiar el path del script para que lo cargue de modo correcto.

Usar ASCIIMathML es sencillo: basta escribir nuestras fórmulas en un formato de sólo texto sencillo, delimitándolas con ``, o bien signos de dólar ($). Algunos ejemplos:

  • `sin^-1(x)`: la función inversa del seno.
  • `d/dxf(x)=lim_(h->0)(f(x+h)-f(x))/h`: la fórmula de la derivada.
  • `int_0^1f(x)dx`: una integral definida.

La sintaxis se describe en la página que ya he enlazado, y con más detalle del que nadie necesitaría saber aquí. Además, el script tiene algunas variables globales en su cabecera que sirven para cambiar el aspecto de los resultados:

var notifyIfNoMathML = true; // display note if no MathML capability
var alertIfNoMathML = false;  // show alert box if no MathML capability

Cambiando estos dos valores se puede determinar que se notifique al usuario mediante un aviso en lugar de la fórmula a mostrar, o con un popup (o ambos, si se quiere).

var mathcolor = "red";       // change it to "" (to inherit) or any other color

Esto lo pondría como "". Queda un poco molesto que las fórmulas aparezcan en rojo, como si no fueran suficientemente intimidatorias de por sí.

var mathfontfamily = "serif"; // change to "" to inherit (works in IE)
                           // or another family (e.g. "arial")

El valor debería ser el de una familia de fuentes aceptable en CSS. "sans-serif" también debería funcionar.

var showasciiformulaonhover = true; // helps students learn ASCIIMath

En producción, esto podría ser false para evitar ruidos innecesarios.

var decimalsign = ".";        // change to "," if you like, beware of `(1,2)`!

En castellano, el separador correcto es ",". Si se pone, hay que tener cuidado de insertar un espacio después de cada coma cuando no queremos que la coma actúe como separador decimal (por ejemplo, en n-tuplas o funciones de más de una variable).