我在 XML 上使用 XSL 转换。转换的某些部分取决于当前的语言环境。有没有办法从 XSL 中找到当前的语言环境?
例如,浮点数的用户可见序列化可能因语言环境而异(英语中的“1.0”是德语中的“1,0”),我的转换需要考虑到这些差异。
我在 XML 上使用 XSL 转换。转换的某些部分取决于当前的语言环境。有没有办法从 XSL 中找到当前的语言环境?
例如,浮点数的用户可见序列化可能因语言环境而异(英语中的“1.0”是德语中的“1,0”),我的转换需要考虑到这些差异。
将其作为参数传入。
<xsl:param name="CultureInfo" select="'default'" />
在样式表的顶层放置一个 XSL 参数,并在调用样式表之前从“外部”设置它。
另一种(专有)方法是注册扩展函数并从样式表中询问。
XSLT 1.0 本身不支持局部变量,但有一些方法可以使用它们,但您需要将其作为参数传递给 XSLT 处理器或依赖扩展。一些处理器会授予您访问区域设置信息的权限,但没有标准的方法,我们必须了解您的环境以查看是否可能。然而,在 XSLT 2.0 中,一些日期、时间和数字格式化函数将(有时受到限制)支持语言环境,并且将由处理器处理,而不是由您处理(这就是为什么有这些函数的原因 :)
至于在 XSLT 1.0 环境中使用某种形式的局部性,并且无论 XSLT 版本如何,我都会为您正在使用的数据类型设置一些基本模板,并通过本地参数(如前所述)。例如,对于数字,请查找xsl:format-number。
至于其他本地内容,我将创建另一个 XML 文件,并让参数作为您所追求的信息的选择器。XML 可能看起来像;
<locals>
<config id="de">
<currency notation="₠" format-number="###.###,##" />
<text id="welcome">Wilcommen!</text>
</config>
<config id="en">
<currency notation="£" format-number="### ###.##" />
<text id="welcome">Welcome!</text>
</config>
<config id="no">
<currency notation="NOK" format-number="###.###,##" />
<text id="welcome">Velkommen!</text>
</config>
</locals>
从这里,将其打开为 ;
<xsl:variable name="locale" select="document('locale.xml')/locals/config[@id=$parameter.for.locale]" />
您可以将其用于欢迎文本;
<xsl:value-of select="$locale/text[@id='welcome']" />
对于数字格式等,它有点复杂,但首先验证这是正确的路径,我将展开,但基本上你应该在语言环境 XML 文件上创建一些键,并使用键查找值。对于数字等(需要告诉我更多关于你想要支持的内容)我会写几个模板来处理这个问题,并使用 ;
<xsl:call-template name="my-template">
<xsl:with-param name="this" select="'some_number'" />
</xsl:call-template>