Prèviament: què és un lloc multilingüe?
No es tracta en aquest article d’escriure un tutorial complert sobre els llocs multilingües: d’una banda, hi ha certament moltes «visions» sobre el què s’anomena «multilingüisme»; de l’altra, ens fa falta sempre una certa distància per poder definir «el millor mètode».
Per tant, més avall trobareu una ressenya de les diferents eines que SPIP proposa per gestionar els llocs multilingües; és cosa vostra utilitzar-los, i parlem-ne en els espais previstos per aquesta finalitat (fòrums, wiki, llistes de discussió, etc.)
Vous trouverez donc ci-dessous une revue des différents outils que SPIP propose pour gérer des sites multilingues; à vous de les utiliser, et discutons-en dans les espaces prévus à cet effet (forums, wiki, listes de discussion, etc.)
Però abans de llegir, oblideu una mica el vostre projecte del dia, i penseu amb les següents situacions:
- un lloc de poesies, classificades per temes (seccions);
- un lloc de documentació, per exemple, per a un programari com SPIP;
- un lloc institucional en 25 llengües;
- un lloc corporatiu bilingüe;
- el lloc d’una associació búlgara amb algunes pàgines en anglès.
El lloc de poesia escollirà més aviat les seves llengües article per article; la documentació d’SPIP, per la seva banda, ho farà per «sectors» (seccions de primer nivell), i mostrarà les traduccions disponibles per cada article, quan aquestes traduccions estiguin disponibles. El lloc institucional en 25 llengües no podrà proporcionar, sens dubte, les 25 traduccions a la vegada, però malgrat tot buscarà conservar els arbres paral·leles; el lloc corporatiu bilingüe tindrà, obligatòriament, una traducció al davant de cadascun dels articles, i un arbre de seccions en dues parts, la part anglesa «idèntica» a la mateixa part en auvergnat; l’associació búlgara afectarà l’anglès en el sector particular del seu lloc, la resta de sectors estaran tots en búlgar (per defecte).
Principi
Per tal de poder autoritzar aquestes situacions tan diverses, i més encara, el model que es posa en funcionament amb SPIP consisteix en determinar una llengua per a cadascun dels articles, cada secció i cada breu. Tant a l’espai públic com a l’espai privat, aquesta llengua determina el tipus de correcció tipogràfica que s’aplica als textos; a l’espai públic això determina igualment la llengua dels elements que insereix l’SPIP a l’entorn d’aquests «objectes»: dates i formularis principalment.
Per crear un lloc multilingüe amb SPIP, es necessita primer de tot configurar el lloc d’una manera conseqüent: a la configuració del lloc, i, evidentment, a la secció de «llengües». Allà podreu activar la gestió multilingüe i escollir les llengües que fareu servir al vostre lloc.
Configurar l’espai privat
Per gestionar més fàcilment el lloc, es pot escollir en la configuració del lloc amb quina precisió es farà la regulació de les llengües, cosa que us permet d’amagar la interfície allà on aquesta no sigui necessària, tot limitant el risc d’errors [1]. SPIP proposa tres nivells d’interfície diferents per escollir les llengües que afecten als articles (i breus, etc.); per ordre creixent de complexitat:
- Par secteur (secció de primer nivell) : a cada sector del lloc li correspon una llengua modificable pels administradors, que afecta a totes les subseccions així com als articles i a les breus que s’hi publiquen; aquesta modificació hauria de satisfer una bona part dels desigs de la majoria dels llocs multilingües, conservant una estructura i una interfície simple.
- Par rubrique : de manera més fina, amb aquesta regulació, es pot canviar la llengua de cadascuna de les seccions del lloc, i no únicament les del primer nivell.
- Par article : la llengua pot ser modificada a nivell de cadascun dels articles; aquesta elecció és compatible amb els anteriors (per exemple, es pot escollir la llengua per secció però aplicar excepcions aquí i allà en alguns articles) i permet totes les subtileses imaginables sempre i quan no creem un lloc amb una estructura incomprensible...
Blocs multilingües
[SPIP 1.7.2] Alguns objectes, com els autors o les paraules clau, poden escriure’s ortogràficament de manera diferent segons si l’article està en una o altre llengua. No obstant, seria absurd concebre «traduccions d’una paraula clau» o «traducció d’un autor», donat que és el mateix autor qui signa els dos articles, o la mateixa paraula clau (el mateix «concepte») que se’ls vincula. Per tant, aquests conceptes no tenen llengua en el sentit d’SPIP, però és possible, amb l’ajuda dels «blocs multi», de mostrar-los en la llengua del context en el qual són invocats (per dir-ho simplement: fer que la paraula clau «Irak» es mostri com «Iraq» quan estigui vinculat a un article en anglès).
El «bloc multi» és una drecerara SPIP, l’estructura del qual és relativament intuïtiva:
<multi>chaîne 1 [xx] chaîne 2 [yy] chaîne 3 ...</multi>
Per reprendre l’exemple de la paraula clau, el seu títol s’entraria d’aquesta manera a l’espai privat:
<multi>[fr]Irak [en]Iraq</multi>
Si un bloc multi és cridat per mostrar-se en una llengua que no està prevista, sempre és la primera part del bloc la que es mostra («cadena 1» en el primer exemple, «Irak» en el segon). Això té com a finalitat que el que es mostra no quedi mai buit [2].
NB: els blocs multi es poden també utilitzar, seguint la mateixa estructura, dins dels esquelets (plantilles) ; vegem l’article Internacionalitzar els esquelets (plantilles).
Bucles i etiquetes: com fer-ho
Un cop hem regulat l’espai privat amb tota la delicadesa del món, hem de passar al lloc públic. I, evidentment, si cada article té la possibilitat de tenir la seva pròpia llengua, raonadament escollida (segons el mecanisme explicat més amunt), les plantilles han de poder-ho tenir en compte en la publicació del lloc.
1. Una bona notícia per començar: el multilingüisme de les plantilles és en la seva major part totalment natural; no hem de fer plantilles diferents per mostrar els articles de llengües diferents. Una mateixa plantilla adapta automàticament la seva publicació a la llengua que s’utilitzi en aquell moment.
D’aquesta manera tots els elements mostrats a l’entorn i dins d’un article en una llengua determinada, seran publicats en aquesta llengua. Això afecta tant a la data de publicació de l’article com als formularis de resposta al fòrum, de signatura d’una petició, etc. En general: tota etiqueta SPIP inclosa dins un bucle ARTICLES
serà publicada en la llengua de l’article (també en el cas de les seccions i les breus).
Exemple : si la vostra pàgina d’inici conté un sumari mostrant els deu últims articles publicats així com la seva data de publicació, la data dels articles en vietnamita es mostrarà en vietnamita, la dels articles en crioll de l’Illa de la Reunión es mostrarà en crioll de l’Illa de la Reunión, etc.
Nota: aquest funcionament suposa que la llengua de l’article ha estat objecte de traducció en l’ SPIP. D’aquesta manera, si un article ha estat escrit en volapuk però la vostra versió de l’ SPIP no ha estat encara traduïda al volapuk (us convidem, evidentment, a corregir aquesta petita llacuna participant en l’esforç de traducció), la data de l’article es mostrarà però en una llengua per defecte, probablement el francès.
2. L’orientació de l’escriptura
Si el vostre lloc conté llengües que s’escriuen d’esquerre a dreta (la majoria de les llengües) però també llengües que s’escriuen de dreta a esquerre (sobretot l’àrab, l’hebreu o el farsí), seran necessaris uns petits complements al codi HTML si volem que la seva publicació es visualitzi sense contratemps [3].
SPIP ofereix, a aquest efecte, una etiqueta específica: #LANG_DIR
, que defineix l’orientació de l’escriptura de la llengua que s’està emprant en aquell moment. Aquesta etiqueta és utilitzada com valor de l’atribut dir
en la major part dels marcadors HTML (el que dóna, doncs, «ltr
» per les llengües que s’escriuen d’esquerre a dreta, i «rtl
» per les altres [4]).
Un bucle de publicació del sumari esdevé:
<ul>
<BOUCLE_sommaire(ARTICLES){par date}{inverse}{0,10}>
<li dir="#LANG_DIR">[(#DATE|affdate)]:
<a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_sommaire>
</ul>
Si la compaginació reposa en elements alineats a la dreta o a l’esquerre, aquests s’hauran d’invertir per les llengües escrites de dreta a esquerre: s’ha de pensar, a continuació, a substituir tots [5] els elements de la plantilla marcats left
o right
per les etiquetes #LANG_LEFT
i #LANG_RIGHT
. Pel que fa referència a la definició de la pàgina mateixa, és força assenyat de començar per indicar la llengua de l’element demanat, i l’adreça general de la pàgina:
<html dir="#LANG_DIR" lang="#LANG">
<head>
...
</head>
<body>
...
</body>
</html>
3. Els enllaços de traducció
SPIP proposa un sistema de traducció entre articles: es pot especificar quines són les diferents traduccions d’un article (nota: aquestes traduccions són considerades cadascuna d’elles com a articles complets). El criteri {traduction}
permet llavors, en un bucle ARTICLES
, recuperar totes les versions d’un mateix article.
Per exemple, per mostrar totes les traduccions de l’article corrent:
<BOUCLE_traductions(ARTICLES){traduction}{exclus}>
[<a href="#URL_ARTICLE" rel="alternate" hreflang="#LANG">(#LANG|traduire_nom_langue)</a>]
</BOUCLE_traductions>
Fixem-nos amb el criteri {exclus}
, que permet de no mostrar la versió corrent, i el filtre |traduire_nom_langue
que proporciona el nom veritable de la llengua a patir del seu codi informàtic (això permet mostrar «français» en lloc de fr
», «català» en lloc de «ca
», etc.).
- Un criteri complementari {origine_traduction}
(pels més obstinats) permet seleccionar únicament la «versió original» de l’article corrent.
Una pàgina del wiki d’spip-contrib reuneix exemples de bucles que utilitzen aquests criteris: http://www.spip-contrib.net/-Carnet....
4. Elements suplementaris
[SPIP 1.7.2] introdueix altres elements que permeten fabricar llocs multilingües:
— el criteri {lang_select}
serveix per forçar la selecció de la llengua pel bucle (AUTEURS), que normalment no ho fa (a l’invers, el criteri {lang_select=non}
permet dir als bucles (ARTICLES), (RUBRIQUES) o (BREVES) de no seleccionar la llengua).
— la variable de personalització $forcer_lang
indica a SPIP que ha de verificar si el visitant disposa d’una galeta de llengua, i en cas afirmatiu tornar-lo a enviar a la pàgina corresponent. Això és el que fa la pàgina de connexió a l’espai privat proporcionat de forma estàndard amb SPIP.
— les etiquetes #MENU_LANG
(i #MENU_LANG_ECRIRE
) mostren un menú de llengua que permet al visitant escollir «aquesta pàgina en ...». La primera etiqueta publica la llista de llengües del lloc; la segona, la llista de llengües de l’espai privat (és utilitzada a la pàgina de connexió, a l’espai privat).
— finalment, els criteris opcionals (vegeu SPIP 1.7, SPIP 1.7.2 ) permeten utilitzar un mateix bucle (de fet, un mateix esquelet) per publicar o tots els articles del lloc en totes les llengües, o només els articles en la llengua passada per la URL. Això pot ser útil en els backend, per exemple, o en els bucles de cerca:
<BOUCLE_recents(ARTICLES){lang?}{par date}{inverse}{0,10}>
<BOUCLE_recherche(ARTICLES){lang?}{recherche}{par points}{inverse}{0,10}>
Esquelets internacionals per un lloc massivament multilingüe
Tot el que hem vist fins ara ens ha permès de convertir en multilingüe la part pròpiament d’SPIP de la nostra plantilla: tot el que ha sortit dels bucles es publica en l’orientació correcta, amb bona tipografia i els elements produïts per l’SPIP (formularis, dates...) estan en la llengua demanada.
Per un lloc que presenti un nombre modest de llengües (bilingüe, per exemple), o per aquell que té una llengua principal i algunes llengües addicionals, ens podríem quedar aquí. Els texts fixats presents dins les plantilles, és a dir les notes escrites directament dins l’HTML com «Mapa del lloc», «Espai de redacció», «Respondre a aquest missatge»... poden, o bé en alguns casos restar en una sola llengua, o llavors, un lloc bilingüe podrà utilitzar esquelets separats per cadascuna de les dues llengües.
No obstant, si voleu realitzar i gestionar eficaçment un lloc que presenti moltes llengües en la seva totalitat, esdevé il·lusori mantenir plantilles separades, o imposar una navegació en una única llengua (encara que sigui en anglès o esperanto...). Per crear un únic joc de plantilles, que funcioni en totes les llengües, cal internacionalitzar les plantilles de manera que es modifiquin els textos independentment del codi HTML que continguin (el qual resta, ell mateix, fixat d’una llengua a una altra). Aquesta tasca és força «més complexa» i serà objectiu d’un article separat.
Detalls addicionals
- Les dreceres tipogràfiques <code> i <cadre> produeixen sempre un text escrit d’esquerre a dreta, encara que la llengua de l’article s’escrigui normalment de dreta a esquerre. Efectivament, aquests dos recursos estan destinats a mostrar codi o dades informàtiques, els quals gairebé sempre s’escriuen d’esquerre a dreta (i, la major part de les vegades, en caràcters occidentals).
- En tot allò que fa referència a l’orientació de l’escriptura, adonem-nos que sempre els atributs left
i right
de l’HTML es troben sovint presents, també, als fulls d’estil. Això vol dir que segurament haureu d’incloure, a dins del vostre esquelet, la part corresponent del full d’estil (per a fer servir les etiquetes #LANG_LEFT
i #LANG_RIGHT
) més que no pas posar-ho en un fitxer separat.
Aquí teniu un recapitulació del comportament de les etiquetes SPIP lligades a l’orientació de l’escriptura:
Llengua | #LANG_LEFT | #LANG_RIGHT | #LANG_DIR |
---|---|---|---|
llengües escrites d’esquerre a dreta | left | right | ltr |
àrab, farsí, hebreu... | right | left | rtl |
- Un filtre |direction_css
permet d’«invertir» un fitxer CSS en aquelles llengües que s’escriuen de dreta a esquerre. Si el full d’estil CSS que s’ha d’invertir s’anomena, per exemple, style.css, aquest filtre utilitza (en cas que la llengua actual s’escrigui de dreta a esquerre) un possible full style_rtl.css ; si aquest no existeix, crea automàticament un full RTL substituint totes les ocurrències de left per right i viceversa (i l’emmagatzema a dins del directori IMG/cache-css/). La majoria de les vegades s’aplica en una etiqueta #CHEMIN
, d’aquesta manera: [(#CHEMIN{style.css}|direction_css)]
.