Internacionalizar los esqueletos

La internacionalización de los esqueletos, abordada en este artículo, está disponible a partir de SPIP  1.7.

¿Por qué crear esqueletos multilingües?

Al poner documentos en línea, SPIP adapta ciertas informaciones «automáticas» al idioma apropiado. En particular las fechas aparecen en el idioma del sitio, de un artículo o de una sección. Los formularios también aparecen en el idioma correspondiente (por ejemplo la interfaz para publicar un mensaje en los foros). Todo eso, ya lo traduce SPIP.

Sin embargo no alcanza: las webmestres suelen agregar a los esqueletos ciertas informaciones, en particular las que describen la navegación en el sitio. Puede ser necesario, por ejemplo, disponer ciertos textos como «Mapa del sitio», «Responder a este artículo», «Artículos de la misma autora o autor», «En la misma sección»... Para un sitio en un solo idioma, es fácil incorporar estos elementos: se los inserta «a fuego» en el código HTML de los esqueletos. El problema surge cuando el sitio es multilingüe: bajo un artículo en español, uno querrá agregar «Responder a este artículo», pero bajo un artículo en francés se espera leer « Répondre à cet article ».

[SPIP 1.7.2] ofrece tres métodos para manejar estos elementos de texto según el idioma:

— (1) un método que consiste en conservar los elementos de textos de los esqueletos en ficheros de idioma (un fichero por cada idioma utilizado en el sitio), separados de los esqueletos; siendo un esqueleto único (por ejemplo article.html) el que, usando códigos definidos por el webmaster, llama a estos elementos de texto según el idioma utilizado. De esta manera,el mismo esqueleto article.html mostrará automáticamente el texto «Répondre à cet article» o «Comment on this document» en función del idioma del artículo (francés o inglés). Se aconseja vivamente este método, pues ofrece mas flexibilidad, facilita las actualizaciones del sitio (se trabaja con un solo esqueleto que maneja automáticamente varios idiomas) y hay herramientas que a mediano plazo se integrarán en SPIP, que facilitan el trabajo colectivo de traducción de la interfaz del sitio (varios administradores, que dominan idiomas diferentes, podrán traducir la interfaz desde el espacio privado, sin tener que intervenir en los ficheros de esqueletos);

— (2) un método más rápidamente accesible y técnicamente simple, que se basa en la creación de ficheros de esqueletos diferentes para cada idioma. En éste método, se fabrica un fichero article.html para manejar los artículos en el idioma principal del sitio, y un fichero article.en.html para los artículos en inglés (nota: en realidad, article.html se aplica a todas las lenguas que no tienen un esqueleto explícitamente definido). Este método se adapta a la creación rápida y simple de sitios que comprenden pocos idiomas diferentes y con una estructura no muy compleja, pero se la desaconseja si el sitio utiliza varios idiomas y/o si se utilizan esqueletos diferentes según la sección. Además en todos los casos se reemplaza mejor con el método 3 descrito a continuación:

— (3) el método de los «bloques multilingües», introducido por [SPIP 1.7.2], funciona igual de bien con los contenidos y con los esqueletos. Basta con introducir en el esqueleto la siguiente construcción:

y se mostrará la frase en el idioma deseado. Si bien este sistema es muy flexible, aún tiene limitaciones cuando el número de idiomas es grande, y porque es necesario que distintos traductores actúen sobre el sitio (se necesita que puedan modificar el esqueleto, lo que se puede evitar con el método de los ficheros de idioma).

1. Método de ficheros de idioma

El principio de los ficheros de idioma consiste en insertar en un esqueleto único un código, que corresponderá en cada idioma a un elemento de texto (una «cadena»); de un idioma a otro el código no varía, pero se traduce el texto correspondiente.

Por ejemplo, se puede decidir que el código telechargement corresponde:
— en francés, a la cadena «télécharger ce fichier»,
— en inglés, a la cadena «download this file»,
— en español, a la cadena [1] «descargar este archivo»,
— etc.

En el fichero de esqueleto de los artículos (un sólo fichero para manejar todos los idiomas), article.html, alcanza con insertar el código (anota la sintaxis) :

Al visualizar un artículo, este código será remplazado por su traducción en el idioma del artículo.

Por ejemplo; en el esqueleto article.html, insertamos en el bucle que cuelga los documentos asociados al artículo, el código siguiente:

Si el artículo en cuestión está en español, producirá:

<a href="/IMG/jpg/midocumento.pdf">descargar este archivo</a>

si está en inglés:

<a href="/IMG/jpg/midocumento.pdf">download this file</a>

y así sucesivamente. Un esqueleto único, que contiene cierto código, cuelga un texto traducido en cualquiera de los idiomas utilizados en el sitio.

-  Utilizar textos que ya están traducidos

Para facilitar el trabajo de las webmestres, SPIP brinda un conjunto de cadenas ya traducidas (por los traductores de SPIP). Utilizando estas cadenas, que corresponden a elementos de textos frecuentemente utilizados en los sitios Web, el webmestre puede rápidamente realizar una interfaz que funcionará en diferentes idiomas, incluso aquellas que él o ella misma no habla.

Puedes listar las cadenas disponibles desde el espacio privado: entra en la sección «Gestión de idiomas» de «Administración del sitio», y luego pulsa sobre la pestaña «Ficheros de idioma». Copia los códigos elegidos para realizar los esqueletos.

Les fichiers de langue dans l’espace privé

Ejemplo : un webmestre quiere realizar la interfaz para un sitio en francés, en español y en árabe, pero no él mismo no habla ni árabe ni francés. Insertando en los esqueletos los códigos que vienen con SPIP no debe preocuparse de obtener las traducciones al francés o al árabe, pues estas ya fueron hechas inicialmente por los traductores de SPIP; así, al diseñar su interfaz en español con los códigos que vienen con SPIP sabe de antemano que estas páginas aparecerán adecuadamente en francés y en árabe cuando uno de los redactores del sitio escriban un artículo en estos idiomas.

Si, ulteriormente, se agregan artículos en polaco, aparecerán inmediatamente con los elementos de texto traducidos al polaco, sin que el diseñador deba intervenir de nuevo.

Otra ventaja de este método: facilita la creación de esqueletos «para compartir» inmediatamente multilingües. Los esqueletos realizados con este método serán inmediatamente utilizables en cualquiera de los idiomas en los que se traduzca SPIP.

De un punto de vista técnico, los elementos de texto que vienen en la distribución estándar de SPIP se almacenan en los archivos de idioma «public»:
— /ecrire/lang/public_fr.php contiene las cadenas en francés,
— /ecrire/lang/public_es.php en español,
— etc.

-  Crear uno mismo sus própios códigos

Es posible crear uno mismo sus propios códigos, que correspondan a cadenas que se desea agregar.

Alcanza para esto con crear ficheros de idioma personales, a partir del modelo de los ficheros public.... Para crear tus propios ficheros, instala en tu carpeta de esqueletos o en la carpeta /ecrire/lang:

— local_es.php para definir las cadenas en español,
— local_en.php en inglés,
— ...

Histórico: En las versiones anteriores a [SPIP 1.8], los archivos de idioma personales sólo se podían poner en la carpeta /ecrire/lang.

Por ejemplo, podrás crear las cadenas siguientes:
— telechargement para visualizar en español «Bajar la última versión», en francés «Télécharger la dernière version», ...
— quehaydenuevo para visualizar «Modificaciones recientes».

Con éste método, insertando en los esqueletos los códigos <:telechargement:> y <:quehaydenuevo:>, luego se visualizarán con las traducciones correspondientes, tal como se han definido en los ficheros local_...php3.

Cabe notar que los códigos son arbitrarios: los eliges tú mismo. Por supuesto, se recomienda elegir códigos que sean fáciles de recordar (textos explícitos en vez de números, por ejemplo). Como suele suceder con los códigos informáticos, es conveniente limitar los caracteres utilizados al alfabeto latino, y sin acentos...

Los ficheros de idioma contienen las diferentes traducciones de los códigos que utilizarás; son ficheros PHP que contienen cada uno un cuadro (table) que asocia los códigos a las cadenas de texto correspondiente en cada idioma.

Contendrán, por ejemplo:

-  Versión española:

-  Versión francesa :

-  Versión catalana :

La construcción es la siguiente:

— al principio del fichero:

— al final del fichero:

— la parte que hay que enriquecer uno mismo consiste en varias líneas de definiciones, que siguen el modelo:

OjO: Cada línea de definición se termina por una coma, excepto la última.

OjO-2: Se debe transcribir el texto de la cadena por traducir en códigos HTML (los caracteres acentuados, por ejemplo, se convierten en su equivalente HTML, de tipo &eacute;).

Las apóstrofes dentro de la cadena se deben escapar, es decir que se las debe preceder de una barra invertida (backslash). Por ejemplo en francés, la cadena «sur l’internet» debe ser escrita: sur l\'internet.

Nota: a medio plazo, esta previsto incluir en SPIP una herramienta que permita crear y manejar sus propios ficheros de idioma, sin tener que modificar «a mano» ficheros PHP. Tal herramienta facilitará no sólo la utilización de caracteres «especiales» (letras acentuadas, caracteres de alfabetos no occidentales, escapes de apóstrofes...), sino también la colaboración de varias personas en el proceso de traducción de la interface del sitio público.

Por el momento, la herramienta que permite manejar la traducción de dichas cadenas no se distribuye con SPIP, y su utilización muy generalista (la utilizamos para traducir toda la interfaz de SPIP, y no sólo los archivos de idioma de tipo local...php) la hace un poco compleja para esta tarea. Este programa, trad_lang, que nos sirve para traducir el software SPIP, la ayuda en línea, la interfaz del sitio spip.net, etc., también está disponible bajo licencia GNU/GPL, pero no está integrado en estándar a SPIP. Puedes bajarlo, para usarlo en tu sitio o para otros proyectos. Si lo mejoras, o si tienes ideas para transformarlo, ven a charlar del asunto a la lista de traductores de SPIP spip-trad.

2. Esqueletos separados para cada idioma

El segundo método, más accesible a los webmestres principiantes, consiste en crear esqueletos diferentes para cada idioma. Más o menos de la misma manera que se crean esqueletos específicos para diferentes secciones [2] para obtener interfaces gráficas diferentes.

Si queremos realizar un sitio en español (lengua principal), en francés y en inglés, construiremos tres ficheros de esqueleto diferentes:
— article.html para el español (en realidad, para todos los idiomas que no tienen un fichero de lengua específico),
— article.en.html para el inglés,
— article.fr.html para el francés.

(Nota: si se publica un artículo en alemán, y no existe ningún esqueleto article.de.html en el sitio, SPIP utilizará el esqueleto article.html.)

Importante: Para que los esqueletos «por idioma», definidos agregando un código .lang al final del nombre, sean tomados en cuenta, debe existir en el sitio obligatoriamente una versión «por omisión» del esqueleto (es decir con el mismo nombre, pero sin la extensión de lengua).

En nuestro ejemplo, si article.html no existiera (y en vez de eso se prefirió crear un article.es.html), no se tomarían en cuenta los ficheros en inglés y en francés.

Se pueden combinar estas extensiones de lengua con la nomenclatura «por secciones» en cuyo caso SPIP tomará en cuenta el siguiente orden, suponiendo que la sección número 8 está dentro de la sección 2:
— article=8.es.html (el esqueleto para los artículos en español de la sección 8, pero no sus sub-secciones),
— article=8.html (el esqueleto para la sección pero no sus sub-secciones),
— article-2.es.html (el esqueleto para los artículos en español de la sección 2 y sus sub-secciones),
— article-2.html (el esqueleto para los artículos de la sección 2 y sus sub-secciones),
— article.es.html (el esqueleto para los artículos en español),
— article.html (el esqueleto para los artículos),
— article-dist.html (el esqueleto para los artículos que se distribuye con SPIP).

Nota: salvo algunas excepciones, hay que utilizar aquí los códigos de idioma de dos letras normalizados por la ISO, como «es», para el español. Se puede consultar la lista en la Biblioteca del Congreso de los Estados Unidos (¡oh sí!). Para asegurar la máxima compatibilidad, hay que utilizar los códigos ISO de dos letras («ISO 639-1»), si existen, y para una designación más especializada de un idioma dentro de su familia lingüística los códigos ISO de tres letras («ISO 639-2 T»). Por ejemplo, el alemán se designará como «de». Pero la ISO sólo tiene en cuenta 182 idiomas de entre 5.000 a 7.000 que se hablan en el mundo; para los idiomas aún no catalogados puede servir de guia el catálogo propuesto por el sitio ethnologue.com; para saber más, unete a la lista spip-trad.
Simplificarse la vida. Uno de los métodos muy simples que permite a SPIP manejar un sitio multilingüe consiste en asociar directamente los idiomas a las secciones (y no artículo por artículo) De esta manera, en el caso en que los artículos de un mismo idioma se agrupan en una misma sección (o incluso en un mismo sector), uno puede contentarse con crear los esqueletos específicos por sección, sin utilizar los nombres específicos por idiomas, salvo eventualmente para la portada (esqueleto «sommaire.html»).

De esta manera, si todos los artículos en español están agrupados en la sección 8 (y sus sub-secciones), uno puede contentarse con llamar rubrique-8.html el fichero adaptado al español, y no rubrique.es.html.

Se adivinan los problemas que se pueden plantear con este método:
— el fichero article-2.html debe existir si se quiere que article-2.es.html pueda seleccionarse;
— no se puede decidir, a la inversa, que se use article.es.html en vez de article-2.html si article-2.es.html no existe: la selección por secciones siempre tiene prioridad respecto a la selección por idiomas;
— una corrección de paginación en un esqueleto implica de hacer la misma corrección en las otras versiones;
— es necesario poder insertar uno mismo elementos de texto en los ficheros de esqueletos, aún cuando no entendemos el idioma (imagínate haciendo esqueletos en árabe, cuando uno habla un poco el español del sur («ché, vos..»), y entiende apenas el catalán...).

Por eso, este método está destinado a trabajar rápidamente sobre sitios poco complejos (con pocos o sin esqueletos específicos a ciertas secciones) y/o que llevan pocos idiomas diferentes. En cuanto tu proyecto multilingüe se haga algo ambicioso, se aconseja vivamente trabaja con el método de ficheros de lengua.

3. Los bloques multilingües

Los bloques multi, definidos en el artículo Hacer un sitio multilingüe funcionan igual de bien en el texto de los autores o las palabras clave como en los esqueletos. Cuidado, estos bloques sólo manejan texto, ¡y no bucles de SPIP!

Para manejar rápidamente un sitio multilíngüe es, sin duda, el mejor método al principio, accesible y eficaz a la vez; después, una vez estabilizado el sitio, si se necesita optimizar los esqueletos (por ejemplo, para abrirlos a más idiomas; o para distribuirlos en forma de contribución; o incluso para «profesionalizarlos»), habrá que transformar los bloques multi en ficheros de idioma.

Notas

[1NdT: en Latinoamérica se suele hablar de «archivo» y en España de «fichero» para lo que los anglófonos llaman «file» y los francófonos «fichier». En la documentación de SPIP hablamos de «fichero», porque así empezamos, pero pongamos de vez en cuando un «archivo».

Autor o autora dani Publicado el: Actualizado: 26/10/12

Traducciones: عربي, català, Deutsch, English, Español, français, italiano, Nederlands, Türkçe, українська