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.
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.
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.
© 2003 Yves Mettier