How to blog in more than one language

The Spanish blogosphere looks weak. But language is accidental, automatic translation is ubiquitous, and the relative importance of content creator language is shrinking day in day out. However, when considering translation issues like those illustrated in the last post, perhaps some human intervention is in order to bridge the gap between semantic worlds.

To assist in this task, I have prepared a Blogger widget that allows writing posts in more than one language, discriminating among them and enabling the reader a clear view of her preferred content. To the user, the scheme resembles somewhat server-side content negotiation, but in a DOM-manipulating, Web-two-dot-zeroish way.

Some usage notes:

  1. First of all, you have to add the widget to your blog. There is a button next to the language selection combo to do just that. Not in Blogger? No problemo. Just download the script langsupport.js, and deploy it to your favorite location (it can be included in your template code, or anywhere in the HTML of your pages with a <script> tag, it is not too heavy, moreso if you use JS Minifier on it). You should at least remove the sentence with the comment Only needed when code is running inside a Blogger widget to make it work successfully outside Blogger.
  2. If not hosted on Blogger, you should also provide an anchoring point for Javascript to know where to insert the language selector combo. It should look like this:
    <span id="__langSupport__"></span>
  3. Denote language dependant HTML content with the lang attribute, using ISO 639-1 language names (there is no obligation to do so; however, the default language feature will malfunction). For instance:
    <p lang="en">This paragraph is in English.</p>
    <p lang="es">Este párrafo está en español.</p>
  4. Enjoy!

Things to keep in mind:

  • Unmarked HTML elements (those without lang attribute) will be left untouched.
  • A tag marked with a language which is not currently displayed will hide all its contents, even if some inside tag is marked with the currently displayed language. To avoid trouble, do not nest tags with different lang attributes.
  • If there are no lang attributes in the document, the combo selector will not appear.
  • The first language selected depends on default system locale. Therefore, if there is not content in that language on the page, the default language is selected (English, or ‘en’); if there is no content marked as the default language, the first one available (in lexicographical order) is chosen.
  • Unfortunately, the browser’s preferred language configuration is not exposed to the Javascript engine, AFAIK, so that setting cannot influence the default language here (it is only used for content negotiation with specifically configured servers): the default operating system locale is used instead.
  • This has been tested with Firefox 2. Never mind if IE also groks it.

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.

Traducción de traducciones

A ver qué os parece este texto:

[…] El país vecino, Canadá, tiene cantidad probablemente similar de brazos flojos y no pasan estas cosas. Si la gente no necesitara comprarlos, si ella dejara la dejarían ser los discusiones necesarios sobre ellos. […] El editorial del poste de Washington de hoy pide la cosa siguiente: ¿En qué circunstancias y donde comprado el pistolero sus brazos? ¿Habría experimentado la universidad la misma tragedia si la ley de Virginia prohibió los brazos en los campus? Debe tener detectores de brazos en los dormitorios y las salas de clase. […]

Está extraído de TheBlog (Ya le hemos puesto cara, 18/04/2007), pasado dos veces por el traductor de Google, la primera del español al inglés, y la segunda a la inversa. Una prueba casi matemática de que si A es un conjunto de palabras en un idioma L, y f una función de traducción automática de L a L’ (otro idioma), entonces f no es invertible. Es decir:

f(f-1(A)) ≠ A

Por álgebra elemental, esto significa que f no es biyectiva, y en lengua más común, que la transformación de un idioma en otro puede incurrir (e incurre, en cualquier caso no trivial) en pérdida de información. En un aparte, los detectores de brazos me parecen una gran idea, amén de sencillos de implementar: bastará instalar detectores de dedos, dividir por 5 y restar 2.

Los seres humanos traducimos con cierta fiabilidad porque tenemos sensibilidad al contexto. Es obvio para cualquiera con nivel medio de inglés que, en el texto del ejemplo, donde dice brazos debería decir armas. En este idioma, arms es polisémica, y por tanto, tan sólo el contexto puede dar pistas acerca de lo que significa realmente la palabra. La frase completa es una unidad de contexto insuficiente; el párrafo, el texto, todos los textos de una disciplina, son unidades que permitirán mayor precisión. ¿Y ya hay quien está persiguiendo este enfoque? Sí, claro que sí.