0

我在 XML 上使用 XSL 转换。转换的某些部分取决于当前的语言环境。有没有办法从 XSL 中找到当前的语言环境?

例如,浮点数的用户可见序列化可能因语言环境而异(英语中的“1.0”是德语中的“1,0”),我的转换需要考虑到这些差异。

4

2 回答 2

2

将其作为参数传入。

<xsl:param name="CultureInfo" select="'default'" />

在样式表的顶层放置一个 XSL 参数,并在调用样式表之前从“外部”设置它。

另一种(专有)方法是注册扩展函数并从样式表中询问。

于 2009-04-28T06:54:04.247 回答
2

XSLT 1.0 本身不支持局部变量,但有一些方法可以使用它们,但您需要将其作为参数传递给 XSLT 处理器或依赖扩展。一些处理器会授予您访问区域设置信息的权限,但没有标准的方法,我们必须了解您的环境以查看是否可能。然而,在 XSLT 2.0 中,一些日期、时间和数字格式化函数将(有时受到限制)支持语言环境,并且将由处理器处理,而不是由您处理(这就是为什么有这些函数的原因 :)

至于在 XSLT 1.0 环境中使用某种形式的局部性,并且无论 XSLT 版本如何,我都会为您正在使用的数据类型设置一些基本模板,并通过本地参数(如前所述)。例如,对于数字,请查找xsl:format-number

至于其他本地内容,我将创建另一个 XML 文件,并让参数作为您所追求的信息的选择器。XML 可能看起来像;

<locals>
   <config id="de">
     <currency notation="&#8352;" format-number="###.###,##" />
     <text id="welcome">Wilcommen!</text>
   </config>
   <config id="en">
     <currency notation="&#163;" 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>
于 2009-04-28T10:50:02.260 回答