Cet article va décrire les étapes à suivre afin d’effectuer une transformation XSLT permettant de passer du format TBX au format XLIFF. Je tiens à préciser que j’ai effectué cette transformation uniquement en guise d’entraînement au XSLT, et que la conversion TBX > XLIFF n’a pas de réel intérêt.
Je me suis inspiré de l’article de Jean-Christophe et j’ai d’ailleurs utilisé la TBX produite avec son article pour cette transformation.
Rappelons la structure d’un fichier XLIFF : un XLIFF est composé un d’une balise <file> qui contient une balise <body> qui contient des balises <trans-unit> qui contiennent des balises <source>, <target>, et éventuellement <note>.
<xsl:stylesheet
version="1.0"
xmlns="urn:oasis:names:tc:xliff:document:1.2"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-strict.xsd">
<xsl:output
method="xml"
encoding="UTF-8"
indent="yes"
/>
Ici, on va produire un fichier XML, en encodage UTF-8, et le code sera indenté (c’est-à-dire que les lignes seront en retrait en fonction de leur hiérarchie/emboîtement).
<xsl:template match="/">
<xliff version="1.2">
<file>
<xsl:attribute name="original">
<xsl:text>bundle.properties</xsl:text>
</xsl:attribute>
<xsl:attribute name="source-language">
<xsl:value-of select="martif/text/body/termEntry/langSet[1]/@xml:lang"/>
</xsl:attribute>
<xsl:attribute name="target-language">
<xsl:value-of select="martif/text/body/termEntry/langSet[2]/@xml:lang"/>
</xsl:attribute>
<xsl:attribute name="datatype">
<xsl:text>xml</xsl:text>
</xsl:attribute>
<body>
<xsl:apply-templates select="martif/text/body/termEntry"/>
</body>
</file>
</xliff>
</xsl:template>
Tout ce qui se trouve entre <xsl:template match= »/ »> et </xsl:template> représente le contenu total du fichier XLIFF qu’on va produire, et qui va remplacer le contenu présent dans la TBX.
Avec la commande <xsl:apply-templates select= »martif/text/body/termEntry »/> on va directement piocher les données des balises <termEntry> de la TBX, qui se trouve elle même dans la balise <body>, qui se trouve dans la balise <text>, dans la balise <martif>.
On rajoute par ailleurs plusieurs attributs à la balise <file>.
<xsl:template match="martif/text/body/termEntry">
<trans-unit>
<xsl:attribute name="id">
<xsl:value-of select="langSet[1]/tig/term"/>
</xsl:attribute>
<note xml:lang="en">UI</note>
<xsl:apply-templates select="langSet[1]"/>
<xsl:apply-templates select="langSet[2]"/>
</trans-unit>
</xsl:template>
Ici on vient sélectionner les balises <langSet>. Il est important de préciser le [1] et le [2] pour que les premières et deuxièmes balises soient respectivement sélectionnées.
<xsl:template match="langSet[1]">
<source>
<xsl:attribute name="xml:lang">
<xsl:value-of select="@xml:lang"/>
</xsl:attribute>
<xsl:value-of select="tig/term"/>
</source>
</xsl:template>
<xsl:template match="langSet[2]">
<target>
<xsl:attribute name="xml:lang">
<xsl:value-of select="@xml:lang"/>
</xsl:attribute>
<xsl:value-of select="tig/term"/>
</target>
</xsl:template>
</xsl:stylesheet>
Les balises <langSet> sont transformées en balises <source> et <target>, et le fichier XSLT est complet.
Une fois qu’on a notre fichier XSLT, il faut utiliser le logiciel Okapi Rainbow afin de procéder à la conversion. Vous pouvez le télécharger gratuitement à partir de ce lien : https://okapiframework.org/binaries/main/
Une fois Rainbow ouvert, ajouter le fichier à convertir à partir de menu « Input > Add Documents… » ou à partir de la petite croix verte juste en dessous.
Une fois le fichier source chargé dans le logiciel, allez dans le menu « Utilities > XML Utilities > XSL Transformation… », insérez le chemin de votre fichier XSLT dans le champ « Path of the XSLT template to apply: » et cliquez sur le bouton « Execute ».
S’il n’y a aucune erreur, votre fichier XLIFF sera généré.