Thanks for the hints!
I think the solution to my problem will be something like:
Having a messages.xml with:
<messages>
<message name="msgContact" lang="en">Please contact <param
name="personalName"/> for details.</message>
<message name="msgContact" lang="nl">Neem contact op met <param
name="personalName"/> voor details.</message>
</messages>
A doc.xml with:
<content/>
and a xsl stylesheet with:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="lang" select="'en'"/>
<xsl:variable name="messages" select="document
('messages.xml')"/>
<!-- THIS REQUIRES XSLT 2.0 -->
<xsl:template match="content">
<xsl:variable name="params">
<params>
<param
name="personalName">Jeroen</param>
</params>
</xsl:variable>
<xsl:call-template name="formatMessage"/>
<xls:with-param name="id" select="msgContact"/>
<xls:with-param name="params" select="$params"/>
</xsl:call-template>
</xsl:template
<xsl:template name="formatMessage">
<xsl:param name="name"/>
<xsl:param name="params"/>
<xsl:apply-templates select="$messages/messages/message
[(_at_)lang=$lang && @name=$name]" mode="formatMessage">
<xls:with-param name="params" select="$params"/>
</xsl:apply-templates>
</xsl:template>
</xls:template match="param" mode="formatMessage">
<xsl:param name="params"/>
<xsl:value-of select="$params/params/param[(_at_)name=current
()/@name]"/>
<xsl:template>
<xsl:template match="*" mode="formatMessage">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates mode="formatMessage"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Jeroen.