You are not logged in.
Bonjour,
J'ai bien vu qu'on pouvait relier deux pages en signalant des traductions. Par contre, quand j'utilise cette option, je n'ai pas de drapeau qui apparait sur ma page. J'avais prévu déjà dans ma charte graphique des drapeaux pour changer de langue, mais quelle fonction utiliser pour passer d'une langue à l'autre sur un même contenu.
j'ai fait un lien FR => href="{$site-uri-prefix}/fr/{ametys:pagePath()}"
et un lien EN => href="{$site-uri-prefix}/en/{ametys:pagePath()}"
ca marche un peu près puisque j'obtiens l'url de la page courante, sauf que pour la version traduite il me propose l'url de la page courante et non pas sa correspondance. Existe-t-il une fonction XSL pour le faire ?
Merci
Offline
Si vous avez le plugin communautaire de traduction, il ajoute une métadonnée sur la page pour dire les traductions existantes, dans la skin de démo vous trouverez le code suivant pour faire apparaître les drapeaux
<xsl:if test="$translations/*">
<div class="art-translation">
<a name="translation"></a>
<span class="hidden-L"><i18n:text i18n:key="SKIN_TRANSLATION" i18n:catalogue="skin.{$skin}"/></span>
<ul>
<xsl:for-each select="$translations/*">
<li>
<xsl:attribute name="class">
<xsl:if test="position() = 1"><xsl:text>first </xsl:text></xsl:if>
<xsl:if test="position() = last()"><xsl:text>last </xsl:text></xsl:if>
<xsl:text>art-translation-</xsl:text><xsl:value-of select="local-name()"/>
</xsl:attribute>
<a href="{.}" title="skin.{$skin}:SKIN_TRANSLATION_{local-name()}" i18n:attr="title">
<img width="14" height="11" src="{ametys:skinURL(concat('img/translation/', local-name(), '.png'))}" alt="skin.{$skin}:SKIN_TRANSLATION_{local-name()}" i18n:attr="alt"/>
</a>
</li>
</xsl:for-each>
</ul>
</div>
</xsl:if>
Raphael Franchet
Expert Ametys
Offline
Tout à fait, merci !
J'ai copié cette fonction
<xsl:template name="translation">
<xsl:variable name="raw-translations">
<xsl:for-each select="/cms/page/metadata/translations/*">
<xsl:variable name="hrefResolved" select="resolver:resolve('page', .)"/>
<xsl:if test="$hrefResolved != ''">
<xsl:element name="{local-name()}">
<xsl:value-of select="$hrefResolved"/>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="translations" select="exsl:node-set($raw-translations)"/>
<xsl:if test="$translations/*">
<a name="translation"></a>
<span class="hidden-L"><i18n:text i18n:key="SKIN_TRANSLATION" i18n:catalogue="skin.{$skin}"/></span>
<ul>
<xsl:for-each select="$translations/*">
<li>
<xsl:attribute name="class">
<xsl:if test="position() = 1"><xsl:text>first </xsl:text></xsl:if>
<xsl:if test="position() = last()"><xsl:text>last </xsl:text></xsl:if>
<xsl:text>art-translation-</xsl:text><xsl:value-of select="local-name()"/>
</xsl:attribute>
<a href="{.}" title="skin.{$skin}:SKIN_TRANSLATION_{local-name()}" i18n:attr="title">
<img width="14" height="11" src="{ametys:skinURL(concat('img/translation/', local-name(), '.png'))}" alt="skin.{$skin}:SKIN_TRANSLATION_{local-name()}" i18n:attr="alt"/>
</a>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
mais j'obtiens ce message d'erreur :
org.apache.xpath.domapi.XPathStylesheetDOM3Exception : Le préfixe doit se convertir en espace de noms : resolver
Qu'est-ce qu'il manque ?
Offline
Il vous manque ça dans l'en-tête du fichier
xmlns:resolver="org.ametys.cms.transformation.xslt.ResolveURIComponent"
Raphael Franchet
Expert Ametys
Offline
ca fonctionne, merci !
Offline