处理多种(口语)语言的HTML生成器

时间:2011-06-17 08:36:22

标签: html internationalization preprocessor generator

我需要使用多种语言维护一些静态HTML页面。我正在寻找一种能够让这种方法更加简单易用的工具。

我理想的工具可以采用这样的HTML标记:

<div>
  <p>
    <langs>
      <lang lang="en">Welcome!</lang>
      <lang lang="de">Willkommen!</lang>
      <lang lang="it">Benvenuti!</lang>
    </langs>
  </p>
  <p>
    <langs>
      <lang lang="en">Where do you want to go today?</lang>
      <lang lang="de">Wo möchten Sie heute unternehmen?</lang>
    </langs>
  </p>
</div>

如果你用所需的语言代码运行它,“de,en”就会产生:

<div>
  <p>Willkommen!</p>
  <p>Wo möchten Sie heute unternehmen?</p>
</div>

但是,如果你跑,“它,en”它会产生:

<div>
  <p>Benvenuti!</p>
  <p>Where do you want to go today?</p>
</div>

如果第二段落回英语,因为没有意大利语的翻译。 (参数“it,en”表示按优先顺序使用哪些语言。)

有人知道一种适合该法案的工具吗?如果它允许类似于上面的内容,我会考虑像HAML那样更深奥的东西。

*“深奥”是指源不是HTML(或接近HTML)但产生HTML作为输出的东西。

1 个答案:

答案 0 :(得分:0)

你可以写一个XSLT template来做到这一点。

修改 这是一个示例XSL模板:

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" method="xml"/>

    <xsl:param name="desiredLang" select="'it'"/>
    <xsl:param name="defaultLang" select="'en'"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="langs">
        <xsl:variable name="desiredValue" select="./lang[@lang=$desiredLang]"/>
        <xsl:variable name="defaultValue" select="./lang[@lang=$defaultLang]"/>
        <xsl:choose>
            <xsl:when test="$desiredValue">
                <xsl:value-of select="$desiredValue"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$defaultValue"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>

这是它的输出:

<div>
    <p>Benvenuti!</p>
    <p>Where do you want to go today?</p>
</div>