xsl-list
[Top] [All Lists]

RE: Parameters in localized messages

2004-04-20 07:44:58

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.




<Prev in Thread] Current Thread [Next in Thread>