Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 13/02/2014 16:20:46

webupsud
Guest
Registered: 21/01/2014
Posts: 77

correspondance francais-anglais

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

#2 13/02/2014 16:46:39

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: correspondance francais-anglais

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

#3 13/02/2014 17:23:24

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: correspondance francais-anglais

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

#4 13/02/2014 17:30:01

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: correspondance francais-anglais

Il vous manque ça dans l'en-tête du fichier

xmlns:resolver="org.ametys.cms.transformation.xslt.ResolveURIComponent"

Raphael Franchet
Expert Ametys

Offline

#5 13/02/2014 18:03:26

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: correspondance francais-anglais

ca fonctionne, merci !

Offline

Board footer

Powered by FluxBB