代码之家  ›  专栏  ›  技术社区  ›  Ramesh Soni

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

  •  0
  • Ramesh Soni  · 技术社区  · 17 年前

    我正在XML上使用XSL转换。转换的某些部分依赖于 current locale . 有没有办法从XSL中找到当前的区域设置?

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   AlexanderJohannesen    17 年前

    局部变量在XSLT 1.0中本机不受支持,但有一些方法可以使用它们,但您需要将其作为参数传递给您的XSLT处理器或依赖扩展。 一些 处理器将授予您访问区域设置信息的权限,但没有标准的方法来执行此操作,我们必须了解您的环境,以确定是否可行。然而,在XSLT2.0中,一些日期、时间和数字格式功能将对区域设置具有(有时是有限的)支持,并且将由处理器处理,而不是由您(这就是为什么有这些功能的原因:)

    至于在XSLT1.0环境中使用某种形式的局部性,并且部分地作为一件好事(tm),不管XSLTversion如何,我将为您使用的数据类型设置一些基本模板,并传递局部参数(如前所述)。对于数字,请查找 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>
    
        2
  •  2
  •   Tomalak    17 年前

    作为参数传入。

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

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

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