如何在XSL中获取当前的国家/地区代码/区域设置?

时间:2009-04-28 06:48:55

标签: xml xslt cultureinfo

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

例如,浮点数的用户可见序列化可以在区域设置之间变化(英语中的“1.0”是德语中的“1,0”),并且我的转换需要考虑这些差异。

2 个答案:

答案 0 :(得分:2)

将其作为参数传递。

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

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

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

答案 1 :(得分:2)

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

至于在XSLT 1.0环境中使用某种形式的局部性,部分用作Good Thing(TM),无论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>