Après quelques heures de recherche sur XSLT, je m'avoue vaincu ! J'ai besoin de corriger un grand nombre de fichiers de traduction XLIFF .xlf qui nous sont parvenus déformés par un outil de traduction sans nom. Idéalement, je devrais leur appliquer la transformation XSL à l'aide d'un outil de traitement par lots.
Vous trouverez ci-dessous un extrait d'un des fichiers XLIFF :
<body>
<trans-unit id="1" phase-name="pretrans" restype="x-h3">
<source>Adding, Deleting or Modifying Notes in the Call Description</source>
<seg-source>Adding, Deleting or Modifying Notes in the Call Description</seg-source>
<target state="final">, </target>
</trans-unit>
<trans-unit id="2" phase-name="pretrans" restype="x-p">
<source>Description of Fields on RHS</source>
<seg-source>Description of Fields on RHS</seg-source>
<target state="final"> </target>
</trans-unit>
<trans-unit id="3" phase-name="pretrans" restype="x-p">
<source>You can add descriptive text notes to a call recording, if you have the appropriate privileges to do so. These notes are visible to all users who have access to the call recording. It is recommended that each user add their initials to the notes to avoid potential confusion.</source>
<seg-source>
<mrk mtype="seg" mid="1">You can add descriptive text notes to a call recording, if you have the appropriate privileges to do so.</mrk>
<mrk mtype="seg" mid="2">These notes are visible to all users who have access to the call recording.</mrk>
<mrk mtype="seg" mid="3">It is recommended that each user add their initials to the notes to avoid potential confusion.</mrk>
</seg-source>
<target state="final">
<mrk mtype="seg" mid="1" /><ph ctype="" id="1"><MadCap:variable name="zoom_userdocs_variables.var_product_name" xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" /></ph> , .
<mrk mtype="seg" mid="2" /> .
<mrk mtype="seg" mid="3" /> <ph ctype="" id="3"><MadCap:variable name="zoom_userdocs_variables.var_product_name" xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" /></ph> ( ).
<mrk mtype="seg" mid="4" /> .
</target>
</trans-unit>
<trans-unit id="4" phase-name="pretrans" restype="x-p">
<source>To add, delete, or modify text in the description field, click inside the description field.</source>
<seg-source>To add, delete, or modify text in the description field, click inside the description field.</seg-source>
<target state="final"> , , .</target>
</trans-unit>
</body>
Remarquez le target
tag dans le troisième trans-unit
nœud. Le site mrk
devraient contenir les nœuds de texte qui sont maintenant devenus des frères et sœurs (par rapport à l'ancienne balise seg-source
ce qui est toujours correct), ce qui perturbe la structure.
J'essaie donc d'identifier toute mrk
qui ne contiennent pas de nœuds de texte, et y replacer le nœud de texte suivant.
Voici le résultat souhaité :
<body>
<trans-unit id="1" phase-name="pretrans" restype="x-h3">
<source>Adding, Deleting or Modifying Notes in the Call Description</source>
<seg-source>Adding, Deleting or Modifying Notes in the Call Description</seg-source>
<target state="final">, </target>
</trans-unit>
<trans-unit id="2" phase-name="pretrans" restype="x-p">
<source>Description of Fields on RHS</source>
<seg-source>Description of Fields on RHS</seg-source>
<target state="final"> </target>
</trans-unit>
<trans-unit id="3" phase-name="pretrans" restype="x-p">
<source>You can add descriptive text notes to a call recording, if you have the appropriate privileges to do so. These notes are visible to all users who have access to the call recording. It is recommended that each user add their initials to the notes to avoid potential confusion.</source>
<seg-source>
<mrk mtype="seg" mid="1">You can add descriptive text notes to a call recording, if you have the appropriate privileges to do so.</mrk>
<mrk mtype="seg" mid="2">These notes are visible to all users who have access to the call recording.</mrk>
<mrk mtype="seg" mid="3">It is recommended that each user add their initials to the notes to avoid potential confusion.</mrk>
</seg-source>
<target state="final">
<mrk mtype="seg" mid="1"><ph ctype="" id="1"><MadCap:variable name="zoom_userdocs_variables.var_product_name" xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" /></ph> , .</mrk>
<mrk mtype="seg" mid="2"> .</mrk>
<mrk mtype="seg" mid="3"> <ph ctype="" id="3"><MadCap:variable name="zoom_userdocs_variables.var_product_name" xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" /></ph> ( ).</mrk>
<mrk mtype="seg" mid="4"> .</mrk>
</target>
</trans-unit>
<trans-unit id="4" phase-name="pretrans" restype="x-p">
<source>To add, delete, or modify text in the description field, click inside the description field.</source>
<seg-source>To add, delete, or modify text in the description field, click inside the description field.</seg-source>
<target state="final"> , , .</target>
</trans-unit>
</body>
Normalement, je le ferais en Perl avec LibXML ou autre, mais je suis sûr que c'est une tâche simple pour XSLT. J'ai cherché une solution similaire, mais je n'ai rien trouvé que je puisse faire fonctionner.
Un autre point à noter : bien qu'il soit " joliment imprimé " ici, le résultat final de l'opération est le même. body
La définition du nœud est sur une seule ligne.
Merci. J'ai hâte d'apprendre quelque chose de nouveau !
EDIT : Mise à jour de la source ci-dessus pour montrer d'autres balises enfants à l'intérieur de <target>
éléments, qui doivent être conservés. EDIT 2 : Ajout du résultat souhaité.