4. Une page web multilingue

4.1. La page web pseudo-xhtml

Nous allons rendre notre page multilingue en ajoutant peu de choses à notre feuille de style, En ce qui concerne la page pseudo-xhtml, voici ce que nous ajoutons: tous les textes à traduire seront entourés d'une balise <span xml:lang='fr'>, avec évidemment fr pour le français, en pour l'anglais, et ainsi de suite. Voici ce que devient le titre:

1     <h1>
2       <span xml:lang='en'>Home</span>
3       <span xml:lang='fr'>Accueil</span>
4     </h1>

Vous n'avez plus qu'à faire de même pour les autres textes de la page.

4.2. La feuille de style

Que changeons-nous dans la feuille de style ? Nous rajoutons tout d'abord ce que nous appellerions une variable dans un autre langage, et que nous appelons paramètre ici. Voici quoi rajouter au début de la feuille de style, avant la ligne 11:

    <xsl:param name="lang">en</xsl:param>

Ceci déclare un paramètre de nom lang, dont le contenu toujours initialisé, et dans notre cas à en. Ce paramètre sera utilisé comme une variable: $lang.

Ensuite, voici comment nous allons procéder. Tout élément <span> qui ne contient pas, pour le français par exemple, l'attribut xml:lang='fr' sera éliminé avec ceci:

1   <xsl:template match="span[not(lang($lang))]">
2   </xsl:template>

Et ensuite, tout élément <span> dont l'attribut xml:lang correspondra à la langue utilisée sera recopié, mais nous n'allons pas faire comme d'habitude parce que nous ne voulons pas recopier la balise <span>. Au lieu de copier avec <xsl:apply-templates ...>, nous allons directement copier l'arborescence fille et les attributs, sauf l'attribut lang. Voici le code:

3   <xsl:template match="span[lang($lang)]">
4       <xsl:copy-of select="attribute::*[name()!='lang']|node()"/>
5   </xsl:template>

Ces cinq lignes sont à placer un peu n'importe où, avant le dernier modèle. Par exemple, avant la ligne 34. Nous ne touchons pas au reste.

4.3. La ligne de commande

Pour transformer la page source, les commandes précédentes marchent encore, et prennent la valeur par défaut du paramètre lang. Cependant, nous voulons pouvoir influer sur ce paramètre. C'est sur la ligne de commande que nous le changeons, et dès ici, vous voyez la différence entre xsltproc et sabcmd:

$ xsltproc --stringparam lang fr main.xsl home.xhtml > home.fr.html
$ sabcmd main.xsl home.xhtml '$lang=fr' > home.fr.html

Remarque: je n'ai pas réussi à faire fonctionner sabcmd dans ce cas car il m'indique une erreur. Il ne vous reste plus qu'à observer le résultat, en changeant la valeur du paramètre lang. Et évidemment, pour générer votre site web, vous lancerez xsltproc (ou sabcmd si vous y parvenez) autant de fois qu'il y a de pages web résultantes. Ici, pour l'instant, nous en sommes donc à deux: le fichier home.*.html, en deux langues.

création est mise à disposition sous un contrat Creative Commons