Doc : https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started
Tool : https://cards-dev.twitter.com/validator
This is an example, you need to add in parameter on the site, the twitter:site and creator.
<!-- +
| Twitter card
+ -->
<xsl:template name="twitter-meta">
<!-- <xsl:comment> -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@xxxxxx" />
<meta name="twitter:creator" content="@xxxxxx" />
<xsl:choose>
<xsl:when test="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name = 'DC.description']">
<meta name="twitter:description" content="{/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name = 'DC.description']/@content}"/>
</xsl:when>
</xsl:choose>
<!-- Title of the first content -->
<xsl:for-each select="/cms/page/pageContents/zone[@name = 'default']/zoneItem[information/type = 'CONTENT'][1]/html/head">
<meta name="twitter:title" content="{meta[@name = 'DC.title']/@content}" />
</xsl:for-each>
<!-- Images of all contents -->
<xsl:for-each select="/cms/page/pageContents/zone[@name = 'default']/zoneItem[information/type = 'CONTENT']/html/head">
<!-- illustration -->
<xsl:variable name="illustrationType" select="meta[@name = 'illustration/image;type']/@content"/>
<xsl:variable name="illustrationPath" select="meta[@name = 'illustration/image;path']/@content"/>
<meta name="twitter:image" content="{resolver:resolveImage($illustrationType, concat($illustrationPath, '?objectId=', meta[@name = 'DC.identifier']/@content), 0, 144,false(),true())}" />
</xsl:for-each>
<!-- </xsl:comment> -->
</xsl:template>