Hacer un sitio multilingüe

La modificación más importante que introdujo SPIP 1.7 fué su gestión «natural» de sitios multilingües. La totalidad de este artículo se aplica a SPIP 1.7.

Preámbulo : ¿Qué es un sitio multilingüe ?

En este artículo no tendría sentido redactar un tutorial completo sobre los sitios multilingües: por un lado, es cierto que existen diversos «enfoques» sobre lo que se llama «multilingüismo»; por otra parte, la definición de «el mejor método» es siempre algo personal.

Por eso a continuación revisamos las diferentes herramientas que proporciona SPIP para gestionar sitios multilingües; queda en tu mano el usarlas, y su discusión en los espacios previstos para ello (foros, wiki, listas de discusión, etc.)

Pero, antes de seguir leyendo, deja un poco de lado tu proyecto actual, y piensa en las siguientes situaciones:
-  un sitio de poesías, clasificadas por temas (secciones);
-  un sitio de documentación para, por ejemplo, un software libre como SPIP;
-  un sitio institucional en 25 idiomas ;
-  un sitio corporativo catalán bilingüe;
-  el sitio de una asociación búlgara con algunas páginas en inglés para visitantes extranjeros.

El sitio de poesías elegirá mas bien sus idiomas artículo por artículo; la documentación de SPIP, por su lado, los ventila por «sectores» (secciones de primer nivel), y muestra las traducciones disponibles para cada artículo, cuando están disponibles. El sitio institucional en 25 idiomas, sin duda no podrá disponer de 25 traducciones al mismo tiempo, pero intentará lo mismo conservar las ramificaciones en paralelo; el sitio corporativo bilingüe tendrá obligatoriamente una traducción para cada artículo, y una arborescencia de secciones en dos partes, siendo la parte en inglés una copia fiel de la parte en catalán; la asociación búlgara adjudicará el inglés a un sector determinado de su sitio, quedando el resto de los sectores en búlgaro (por omisión).

Principio

Para poder permitir estas diferentes situaciones, y varias más, el modelo desarrollado por SPIP consiste en determinar un idioma para cada artículo, para cada sección y para cada breve. En el espacio público, al igual que en el espacio privado, este idioma determina el modo de corrección tipográfico que se aplica a los textos; en el espacio público también determina el idioma de los elementos insertados por SPIP para estos «objetos»: principalmente las fechas y los formularios.

Para crear un sitio multilingüe con SPIP, primero hay que configurar el sitio en consecuencia: en la «Administración del sitio», en la sección «Gestión de idiomas», por supuesto. Ahí podrás activar la gestión multilingüe, y elegir los idiomas que utilizas para tu sitio.

Configurar el espacio privado

Para manejar más fácilmente el sitio, en la configuración se puede elegir con qué nivel de precisión se efectúa la gestión de idiomas, lo que permite ocultar la interfaz donde no sea necesaria y así limitar los riesgos de errores [1]. SPIP propone tres niveles de interfaz diferentes para escoger los idiomas que afectan a los artículos (y breves, etc.); por orden de complejidad:

-  Por sector (sección de primer nivel): a cada sección de la raíz del sitio corresponde un idioma modificable por los administradores, que afecta a todas las subsecciones y todos los artículos y breves que contienen; este reglaje debería satisfacer las necesidades de la mayoría de sitios multilingües, manteniendo una estructura y una interfaz sencillas.

-  Por secciones : con este reglaje se puede cambiar, de manera más precisa, el idioma para cada una de las secciones del sitio, no sólo las de primer nivel.

-  Por artículos : el idioma puede modificarse a nivel de cada artículo: esta elección es compatible con las precedentes (se puede por ejemplo elegir el idioma por sección, pero aplicar excepciones por aquí y por allá a ciertos artículos) y permitir toda la precisión imaginable; pero ten cuidado para que la estructura de tu sitio no termine siendo incomprensible...

Bloques multilingües

[SPIP 1.7.2] Ciertos objetos, como los autores o las palabras clave, pueden escribirse de distintas formas según pertenezcan a un artículo en un idioma o en otro. Sin embargo, sería absurdo de concebir la «traducción de una palabra clave» o «traducción de un autor», porque es el propio autor quien firma ambos artículos, o la propia palabra clave (es el mismo «concepto») el que se adjudica. Por eso, estos objetos no tienen idioma en el sentido de SPIP, pero igualmente es posible, con ayuda de los «bloques multi», hacer que se muestren en el idioma del contexto en el cual se les invoca (dicho más sencillamente: hacer que la palabra clave «Irak» se muestre como «Iraq» cuando afecte un artículo en inglés).

El «bloque multi» es un nuevo atajo de SPIP, cuya estructura es relativamente intuitiva:

<multi>cadena 1 [xx] cadena 2 [yy] cadena 3 ...</multi>

Retomando el ejemplo de la palabra clave, su título se escribiría de esta forma :

<multi>[fr]Irak [en]Iraq</multi>

Si se llama a un bloque multi para publicarlo en un idioma que no está previsto, siempre se muestra la primera parte del bloque («cadena 1» en el primer ejemplo, «Irak» en el segundo). Esto es para no tener nunca un campo vacío [2].

NB: los bloques multi también se pueden usar dentro de los esqueletos, según la misma estructura, cf. Internacionalizar los esqueletos.

Bucles y balizas: ¿cómo hacer?

Una vez el espacio privado arregladito con sal y pimienta, pasemos al sitio público. Y sí, aunque cada artículo disponga de su propio idioma juiciosamente elegido (según el mecanismo anteriormente explicado), los esqueletos deben poder tenerlo en cuenta al visualizar el sitio.

1. Para empezar, una buena noticia: lo esencial del multilingüismo de los esqueletos es totalmente natural; no es necesario hacer distintos esqueletos para mostrar artículos en distintos idiomas. El mismo esqueleto adapta automáticamente su presentación a la lengua actual

Esto quiere decir que todos los elementos colgados alrededor y dentro de un artículo en un idioma dado, serán visualizados en dicho idioma. Así es, tanto para la fecha de publicación del artículo, como para el formulario de respuesta al foro del artículo. De manera más general: cualquier baliza SPIP incluida en un bucle ARTICLES se mostrará en el idioma del artículo (al igual que las secciones o las breves).

Por ejemplo, si la portada de un sitio contiene un sumario de los 10 últimos artículos publicados y de su fecha de publicación, la fecha de los artículos en vietnamita estará en vietnamita, la de los artículos en creol de la Reunión estará en creol de la Reunión, etc

Nota: este funcionamiento supone que el idioma del artículo fue traducido en SPIP. Así, si un artículo está en volapük, pero tu versión de SPIP aún no está traducida al volapük (por supuesto te invitamos a corregir esta carencia participando en el esfuerzo de traducción, la fecha de los artículos será visualizada, por cierto en letras, pero en el idioma principal del sitio.

2. El sentido de la escritura

Si tu sitio contiene idiomas que se escriben de izquierda a derecha (la mayoría de los idiomas) pero también lenguas que se escriben de derecha a izquierda (en particular el árabe, el hebreo o el farsi), pequeños complementos al código HTML serán necesarios para que la visualización se haga sin incidentes [3].

A tal efecto, SPIP ofrece una baliza específica: #LANG_DIR, que define el sentido del idioma en curso. Esta baliza se puede usar como valor del atributo dir en la mayoría de las etiquetas HTML [lo que nos da «ltr» para los idiomas que se escriben de izquierda a derecha y «rtl» para los otros [4]).

Así, un bucle de visualización del sumario se convierte en :

<ul>
<BOUCLE_sumario(ARTICLES){par date}{inverse}{0,10}>
  <li dir="#LANG_DIR">[(#DATE|affdate)]:
  <a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_sumario>
</ul>

Si la compaginación reposa en elementos alineados a la derecha o a la izquierda, sin duda se los deberá invertir para los idiomas escritos de la derecha a la izquierda: la primer idea es de remplazar todos [5] los elementos de esqueleto marcados left o right por las balizas #LANG_LEFT y #LANG_RIGHT. Respecto a la definición de la página en si, parece razonable empezar por dar el idioma del elemento solicitado y la dirección general de la página:

<html dir="#LANG_DIR" lang="#LANG">
<head>
...
</head>
<body>
...
</body>
</html>

3. Los enlaces de traducción

SPIP ofrece un sistema de traducción entre artículos: se puede especificar cuales son las diferentes traducciones de un artículo (nota: dichas traducciones son, a su vez, artículos en si). El criterio {traduction} permite que, en un bucle ARTICLES, se recuperen todas las versiones de un mismo artículo.

Por ejemplo, para mostrar todas las traducciones del articulo en curso:

<BOUCLE_traductions(ARTICLES){traduction}{exclus}>
[<a href="#URL_ARTICLE" rel="alternate" hreflang="#LANG">(#LANG|traduire_nom_langue)</a>]
</BOUCLE_traductions>

Notemos el uso del criterio {exclus}, que permite no mostrar la versión en curso de visualización, y el filtro {traduire_nom_langue} [6] que devuelve el nombre completo del idioma a partir de su código informático (esto permite escribir en pantalla «français» en vez de «fr», «English» en vez de «en»...).

-  Un criterio complementario {origine_traduction} [7] (para los puristas) permite seleccionar únicamente la «versión original» del artículo actual.

Una página del wiki de spip-contrib reúne ejemplos de bucles que utilizan estos criterios: http://www.spip-contrib.net/-Carnet....

4. Elementos suplementarios

[SPIP 1.7.2] introdujo otros elementos que permiten crear sitios multilingües:

— el criterio {lang_select} sirve para forzar la selección del idioma para el bucle (AUTEURS), que normalmente no lo hace (a la inversa, el criterio {lang_select=non} permite decirles a los bucles (ARTICLES), (RUBRIQUES) o (BREVES) que no seleccionen el idioma).

— la variable de personalización $forcer_lang indica a SPIP que debe comprobar si el visitante dispone de una cookie de idioma, y en caso afirmativo reenviarle hacia la página correspondiente. Esto es lo que hace la página de conexión al espacio privado que viene como estándar con SPIP.

— las balizas #MENU_LANG (y #MENU_LANG_ECRIRE) presentan un menú de idioma que permite al visitante elegir «esta página en...». La primera baliza muestra la lista de los idiomas del sitio; la segunda, la lista de los idiomas del espacio privado (se usa en la página de conexión al espacio privado).

— por fin, los criterios opcionales (cf. SPIP 1.7, SPIP 1.7.2) permiten utilizar un mismo bucle (de hecho, un mismo esqueleto) para mostrar todos los artículos del sitio en todas las lenguas, o bien sólo los artículos en el idioma pasado en la URL. Esto puede ser útil en los backend, por ejemplo, o en los bucles de búsqueda :

<BOUCLE_recents(ARTICLES){lang?}{par date}{inverse}{0,10}>
<BOUCLE_recherche(ARTICLES){lang?}{recherche}{par points}{inverse}{0,10}>

Esqueletos internacionales para un sitio masivamente multilingüe

Lo que precede nos permite hacer multilingüe la parte específicamente SPIP de nuestro esqueleto: todo lo que sale de los bucles SPIP aparece en el sentido correcto, con la buena tipografía, y los elementos producidos por SPIP (formularios, fechas...) están en el idioma solicitado.

Para un sitio que presenta un número modesto de idiomas (bilingüe, por ejemplo), o para el cual existe un idioma principal y algunos idiomas anexos, podríamos parar aquí. Los textos escritos «a fuego» en los esqueletos, es decir las menciones escritas directamente en el HTML como «Mapa del sitio», «espacio de redacción», «Responder a este mensaje»... pueden, en ciertos casos, quedar en un solo idioma, y en otros -como el de un sitio bilingüe- ser resueltos utilizando esqueletos diferentes para cada idioma.

Sin embargo, si quieres realizar y administrar eficazmente un sitio con numerosos idiomas plenamente representados, sería ilusorio mantener esqueletos separados, o imponer una navegación en un idioma único (incluso el esperanto o el inglés...). Para realizar un juego de esqueletos que funcione en todos los idiomas, hay que internacionalizar los esqueletos para modificar los textos, independientemente del código HTML que los contiene (el cual, por su lado, no se mueve de un idioma a otro). Esta tarea, para la cual es necesario poner las «manos en la masa», es el objeto de un artículo de documentación separado.

Detalles anexos

-  Los atajos tipográficos <code> y <cadre> siempre producen un texto escrito de izquierda a derecha, aunque el idioma del artículo se escriba normalmente de derecha a izquierda. Por cierto, estos dos atajos están principalmente destinados a mostrar código o datos informáticos, que casi siempre se escriben de izquierda a derecha (y usando el alfabeto latino).

-  Siempre respecto al sentido de la escritura, notemos que los atributos left y right del HTML también están presentes a menudo en las hojas de estilo. Esto significa que tendrás que incluir la parte correspondiente de la hoja de estilo en tus esqueletos (para utilizar las balizas #LANG_LEFT y #LANG_RIGHT) en vez de ponerlas en un fichero separado.

He aquí un resumen de las balizas SPIP ligadas al sentido de la escritura:

Idioma#LANG_LEFT#LANG_RIGHT#LANG_DIR
idiomas escritos de izquierda a derecha left right ltr
árabe, farsi, hebreo... right left rtl

-  Un filtro |direction_css permite «invertir» un fichero CSS para los idiomas que se escriban de derecha a izquierda. Si la hoja de estilo CSS a invertir se llama por ejemplo style.css, este filtro utiliza (en caso de que el idioma actual se escriba de derecha a izquierda) una eventual hoja style_rtl.css ; si esta no existe, crea automáticamente una hoja RTL reemplazando todas las ocurrencias de left por right y vice-versa (y la guarda en la carpeta IMG/cache-css/). Se aplica con mayor frecuencia sobre una baliza #CHEMIN, de esta forma: [(#CHEMIN{style.css}|direction_css)].

Notas

[1Cabe mencionar que en la configuración original de la distribución, SPIP queda monolingüe, para no perturbar la interfaz más de lo que fuera necesario.

[2Si, por el contrario, se quiere ver un campo vacío, es necesario crear explícitamente una primera parte vacía con un nombre de idioma cualquiera.

[3Teóricamente el HTML debería arreglar todos esos detalles automáticamente, pero el resultado no siempre es el esperado, sobre todo al cambiar de línea o si se mezclan idiomas que utilizan sentidos de escritura diferentes.

[4Desgraciadamente, las instancias de normalización parecen ignorar por el momento el bustrofedón, lo que impide su utilización en HTML.

[5Todos o casi todos, tú sabrás si tu compaginación tiene peculiaridades que prefieres conservar.

[6traducir_nombre_idioma

[7origen_traduccion

Autor o autora dani Publicado el: Actualizado: 21/03/23

Traducciones: عربي, català, English, Español, français, italiano, Nederlands, Türkçe