Bonjour,
Je crois que l'utilisation d'un fichier de la forme :
1 2 3 4 5 6
| <dictionnaire>
<mot id="door001">
<entree xml:lang="en">door</entree>
<entree xml:lang="fr">porte</entree>
</mot>
</dictionnaire> |
à l'avantage d'être simple et rapide. De plus, rien ne t'empêchera par la suite, de créer une étape intermédiaire pour mettre les données de ton fichier dans une base de donnée.
Si tu veux éclater tes données de langue dans plusieurs fichiers, tu peux utiliser des fichiers de forme similaire, par exemple dictionnaire_en.xml et dictionnaire_fr.xml :
1 2 3
| <dictionnaire xml:lang="en">
<mot id="door001">door</mot>
</dictionnaire> |
1 2 3
| <dictionnaire xml:lang="fr">
<mot id="door001">porte</mot>
</dictionnaire> |
Une fois tes données de langue créées, tu peux les récupérées dans ta feuille de style XSLT :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" standalone="yes" indent="yes"/>
<xsl:param name="lang" select="'fr'"/>
<xsl:variable name="fileDictionnaire" select="concat('dictionnaire_', $lang, '.xml')"/>
<xsl:variable name="dictionnaire" select="document(fileDictionnaire)/dictionnaire"/>
<!-- ... -->
</xsl:stylesheet> |
Tu récupère la langue de l'utilisateur (le français sera la langue par défaut) :
<xsl:param name="lang" select="'fr'"/>
La variable fileDictionnaire contient le nom du fichier de langue :
<xsl:variable name="fileDictionnaire" select="concat('dictionnaire_', $lang, '.xml')"/>
Ensuite, la variable dictionnaire sera un ensemble de noeuds contenant tes données de langue :
<xsl:variable name="dictionnaire" select="document(fileDictionnaire)"/>
Tu peux écrire une petite règle qui se charge de la traduction :
1 2 3 4
| <xsl:template name="translate">
<xsl:param name="ref-id"/>
<xsl:value-of select="$dictionnaire/mot[@id=$ref-id]"/>
</xsl:template> |
Et l'appliquée par exemple ainsi à un élément <entree name="door001"/>:
1 2 3 4 5 6 7
| <xsl:template match="entree">
<!-- ... -->
<xsl:call-template name="translate">
<xsl:with-param name="ref-id" select="@name"/>
</xsl:call-template>
<!-- ... -->
</xsl:template> |
Je n'ai pas relu le code, mais tu devrais déjà un appercu plus clair.
Partager