1.1 --- a/XSLForms/XSL/Prepare.xsl Wed Nov 30 18:03:13 2005 +0000
1.2 +++ b/XSLForms/XSL/Prepare.xsl Thu Dec 01 18:06:13 2005 +0000
1.3 @@ -40,6 +40,12 @@
1.4 <!-- doctype-public="-//W3C//DTD XHTML 1.1//EN"
1.5 doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" -->
1.6
1.7 + <!-- Include internationalisation (i18n) support if appropriate. -->
1.8 + <xsl:if test="//*[@template:i18n]">
1.9 + <axsl:param name="translations"/>
1.10 + <axsl:param name="locale"/>
1.11 + </xsl:if>
1.12 +
1.13 <axsl:template match="/">
1.14
1.15 <!-- Include the remaining attributes. -->
1.16 @@ -152,25 +158,46 @@
1.17 <xsl:when test="@template:effect = 'replace'">
1.18 <xsl:call-template name="special-value"/>
1.19 </xsl:when>
1.20 + <xsl:when test="@template:i18n != '' and @template:i18n != '-'">
1.21 + <xsl:copy>
1.22 + <xsl:apply-templates select="@*"/>
1.23 + <xsl:call-template name="translated-values">
1.24 + <xsl:with-param name="values" select="@template:i18n"/>
1.25 + </xsl:call-template>
1.26 + <xsl:call-template name="expression-attributes"/>
1.27 + </xsl:copy>
1.28 + </xsl:when>
1.29 <xsl:otherwise>
1.30 <xsl:copy>
1.31 <xsl:apply-templates select="@*"/>
1.32 - <xsl:if test="@template:expr and @template:expr-attr">
1.33 - <axsl:if test="{@template:expr}">
1.34 - <axsl:attribute name="{@template:expr-attr}"><xsl:value-of select="@template:expr-attr"/></axsl:attribute>
1.35 - </axsl:if>
1.36 - </xsl:if>
1.37 - <xsl:call-template name="special-value"/>
1.38 + <xsl:call-template name="expression-attributes"/>
1.39 </xsl:copy>
1.40 </xsl:otherwise>
1.41 </xsl:choose>
1.42 </xsl:template>
1.43
1.44 + <xsl:template name="expression-attributes">
1.45 + <xsl:if test="@template:expr and @template:expr-attr">
1.46 + <axsl:if test="{@template:expr}">
1.47 + <axsl:attribute name="{@template:expr-attr}"><xsl:value-of select="@template:expr-attr"/></axsl:attribute>
1.48 + </axsl:if>
1.49 + </xsl:if>
1.50 + <xsl:call-template name="special-value"/>
1.51 + </xsl:template>
1.52 +
1.53 <xsl:template name="special-value">
1.54 <xsl:choose>
1.55 + <!-- Insert the stated value. -->
1.56 <xsl:when test="@template:value">
1.57 <axsl:value-of select="{@template:value}"/>
1.58 </xsl:when>
1.59 + <!-- Insert the translated value. -->
1.60 + <xsl:when test="@template:i18n = '-'">
1.61 + <xsl:call-template name="translated-value">
1.62 + <xsl:with-param name="mode">contents</xsl:with-param>
1.63 + </xsl:call-template>
1.64 + </xsl:when>
1.65 + <!-- Just process the descendants. -->
1.66 <xsl:otherwise>
1.67 <xsl:apply-templates select="node()"/>
1.68 </xsl:otherwise>
1.69 @@ -179,9 +206,98 @@
1.70
1.71
1.72
1.73 + <!-- Match internationalisation attributes. -->
1.74 +
1.75 + <xsl:template match="*[not(@template:if) and not(@template:element) and not(@template:attribute) and not(@template:value) and not(@template:expr) and @template:i18n]">
1.76 + <xsl:copy>
1.77 + <xsl:choose>
1.78 + <xsl:when test="@template:i18n = '-'">
1.79 + <xsl:apply-templates select="@*"/>
1.80 + <xsl:call-template name="translated-value">
1.81 + <xsl:with-param name="mode">contents</xsl:with-param>
1.82 + </xsl:call-template>
1.83 + </xsl:when>
1.84 + <xsl:otherwise>
1.85 + <xsl:apply-templates select="@*"/>
1.86 + <xsl:call-template name="translated-values">
1.87 + <xsl:with-param name="values" select="@template:i18n"/>
1.88 + </xsl:call-template>
1.89 + </xsl:otherwise>
1.90 + </xsl:choose>
1.91 + </xsl:copy>
1.92 + </xsl:template>
1.93 +
1.94 + <xsl:template name="translated-values">
1.95 + <xsl:param name="values"/>
1.96 + <xsl:param name="this-value" select="substring-before($values, ',')"/>
1.97 + <xsl:param name="next-values" select="substring-after($values, ',')"/>
1.98 + <xsl:choose>
1.99 + <xsl:when test="$this-value != ''">
1.100 + <xsl:call-template name="translated-value">
1.101 + <xsl:with-param name="mode">attribute</xsl:with-param>
1.102 + <xsl:with-param name="attribute-name" select="$this-value"/>
1.103 + </xsl:call-template>
1.104 + <xsl:call-template name="translated-values">
1.105 + <xsl:with-param name="values" select="$next-values"/>
1.106 + </xsl:call-template>
1.107 + </xsl:when>
1.108 + <xsl:when test="$values != ''">
1.109 + <xsl:call-template name="translated-value">
1.110 + <xsl:with-param name="mode">attribute</xsl:with-param>
1.111 + <xsl:with-param name="attribute-name" select="$values"/>
1.112 + </xsl:call-template>
1.113 + </xsl:when>
1.114 + <xsl:otherwise/>
1.115 + </xsl:choose>
1.116 + </xsl:template>
1.117 +
1.118 + <xsl:template name="translated-value">
1.119 + <xsl:param name="mode"/>
1.120 + <xsl:param name="attribute-name"/>
1.121 + <xsl:choose>
1.122 + <!-- Look for a translation for the contents. -->
1.123 + <xsl:when test="$mode = 'contents'">
1.124 + <!-- NOTE: Quoting not done completely. -->
1.125 + <!-- NOTE: Guard against scoping issues by generating a special name. -->
1.126 + <axsl:variable name="translation-{$attribute-name}"
1.127 + select="$translations/translations/locale[code/@value=$locale]/translation[@value='{text()}']/text()"/>
1.128 + <axsl:choose>
1.129 + <!-- Insert the translated value. -->
1.130 + <axsl:when test="$translation-{$attribute-name}">
1.131 + <axsl:value-of select="$translation-{$attribute-name}"/>
1.132 + </axsl:when>
1.133 + <!-- Otherwise, just process the descendants. -->
1.134 + <axsl:otherwise>
1.135 + <xsl:apply-templates select="node()"/>
1.136 + </axsl:otherwise>
1.137 + </axsl:choose>
1.138 + </xsl:when>
1.139 + <!-- Look for a translation for an attribute. -->
1.140 + <xsl:otherwise>
1.141 + <!-- NOTE: Quoting not done completely. -->
1.142 + <!-- NOTE: Guard against scoping issues by generating a special name. -->
1.143 + <xsl:variable name="attribute-value" select="@*[local-name() = $attribute-name]"/>
1.144 + <axsl:variable name="translation-{$attribute-name}"
1.145 + select="$translations/translations/locale[code/@value=$locale]/translation[@value='{$attribute-value}']/text()"/>
1.146 + <axsl:choose>
1.147 + <!-- Insert the translated value. -->
1.148 + <axsl:when test="$translation-{$attribute-name}">
1.149 + <axsl:attribute name="{$attribute-name}"><axsl:value-of select="$translation-{$attribute-name}"/></axsl:attribute>
1.150 + </axsl:when>
1.151 + <!-- Otherwise, just process the attribute. -->
1.152 + <axsl:otherwise>
1.153 + <axsl:attribute name="{$attribute-name}"><xsl:value-of select="$attribute-value"/></axsl:attribute>
1.154 + </axsl:otherwise>
1.155 + </axsl:choose>
1.156 + </xsl:otherwise>
1.157 + </xsl:choose>
1.158 + </xsl:template>
1.159 +
1.160 +
1.161 +
1.162 <!-- Remove template attributes. -->
1.163
1.164 - <xsl:template match="@template:element|@template:init|@template:attribute|@template:value|@template:expr|@template:expr-attr|@template:effect|@template:if">
1.165 + <xsl:template match="@template:element|@template:init|@template:attribute|@template:value|@template:expr|@template:expr-attr|@template:effect|@template:if|@template:i18n">
1.166 </xsl:template>
1.167
1.168