Hello
Here is the context :
- I have one XML document which contains my software messages, translated in
several languages.
- I have one XML glosary with the translated messages for english, french and a
new supported language (nl)
- I want to includes in the first document the new available translation
The basic criteria is : If english and french messages match, than insert the
dutch translation.
The point is that in the glossary, some terms are repeated (cf. "Créer/Create")
So, once I have found one matching item to copy, I do not want to insert a 2nd
translation.
For that, I used a variable which I change once I copy.
But it does not work ...
What is the mistake I made ?
Is the a more consise way to do that work (no variable for value_fr and
value_en) ?
Thank you in advance
Jérôme
My software messages :
<STR-Dictionary name="dic000-dial">
<entry name="Dic_Create">
<value xml:lang="fr">Créer</value>
<value xml:lang="en">Create</value>
<value xml:lang="es">Crear</value>
<value xml:lang="pt">Criar</value>
<value xml:lang="it">Crea</value>
<value xml:lang="ja">作æˆ</value>
<value xml:lang="de">Neu</value>
<value xml:lang="zh-TW">建立</value>
<value xml:lang="zh-CN">建立</value>
</entry>
<entry name="Dic_Rename">
<value xml:lang="fr">Renommer</value>
<value xml:lang="en">Rename</value>
<value xml:lang="es">Renombrar</value>
<value xml:lang="pt">Renomear</value>
<value xml:lang="it">Rinomina</value>
<value xml:lang="ja">åå‰$,2>N変更(B</value>
<value xml:lang="de">Umbenennen</value>
<value xml:lang="zh-TW">æ›´å</value>
<value xml:lang="zh-CN">æ›´å</value>
</entry>
</STR-Dictionary>
The translated glossary :
<glossary>
<entry name='ID_2'>
<value xml:lang='fr'>Créer</value>
<value xml:lang='en'>Create</value>
<value xml:lang='nl'>Aanmaken</value>
</entry>
<entry name='ID_3'>
<value xml:lang='fr'>Supprimer</value>
<value xml:lang='en'>Delete</value>
<value xml:lang='nl'>Verwijderen</value>
</entry>
<entry name='ID_6'>
<value xml:lang='fr'>Renommer</value>
<value xml:lang='en'>Rename</value>
<value xml:lang='nl'>Hernoemen</value>
</entry>
<entry name='ID_8'>
<value xml:lang='fr'>Ouvrir</value>
<value xml:lang='en'>Open</value>
<value xml:lang='nl'>Openen</value>
</entry>
<entry name='ID_941'>
<value xml:lang='fr'>Créer</value>
<value xml:lang='en'>Create</value>
<value xml:lang='nl'>Aanmaken</value>
</entry>
</glossary>
My XSL Transformation :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- identity template -->
<xsl:import href="copie.xslt"/>
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:variable name="doc2" select="document('glossaryNL.xml')"/>
<xsl:template match="entry">
<xsl:variable name="value_fr"
select="current()/value[(_at_)xml:lang='fr']"/>
<xsl:variable name="value_en"
select="current()/value[(_at_)xml:lang='en']"/>
<xsl:variable name="value_nl"
select="current()/value[(_at_)xml:lang='nl']"/>
<xsl:variable name="no_value_nl" select="string-length ($value_nl) < 1"/>
<xsl:copy>
<!-- Copy existing stuff .. -->
<xsl:apply-templates select="@*|node()"/>
<xsl:for-each select="$doc2/*/*">
<!-- If 'fr' and 'en' text elements match ... -->
<xsl:if test=" ./value[(_at_)xml:lang='fr'] = $value_fr
and ./value[(_at_)xml:lang='en'] = $value_en">
<xsl:if test="$no_value_nl">
<!-- If no translation yet, append it ..-->
<xsl:copy-of select="./value[(_at_)xml:lang='nl']"/>
<xsl:variable name="no_value_nl" select="false"/>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
The result I get :
<STR-Dictionary name="dic000-dial">
<entry name="Dic_Create">
<value xml:lang="fr">Créer</value>
<value xml:lang="en">Create</value>
<value xml:lang="es">Crear</value>
<value xml:lang="pt">Criar</value>
<value xml:lang="it">Crea</value>
<value xml:lang="ja">作æˆ</value>
<value xml:lang="de">Neu</value>
<value xml:lang="zh-TW">建立</value>
<value xml:lang="zh-CN">建立</value>
<value xml:lang="nl">Aanmaken</value>
<value xml:lang="nl">Aanmaken</value>
</entry>
<entry name="Dic_Rename">
<value xml:lang="fr">Renommer</value>
<value xml:lang="en">Rename</value>
<value xml:lang="es">Renombrar</value>
<value xml:lang="pt">Renomear</value>
<value xml:lang="it">Rinomina</value>
<value xml:lang="ja">åå‰$,2>N変更(B</value>
<value xml:lang="de">Umbenennen</value>
<value xml:lang="zh-TW">æ›´å</value>
<value xml:lang="zh-CN">æ›´å</value>
<value xml:lang="nl">Hernoemen</value>
</entry>
</STR-Dictionary>