【问题标题】:HTML generator that handles multiple (spoken) languages处理多种(口语)语言的 HTML 生成器
【发布时间】:2011-09-17 00:26:37
【问题描述】:

我需要以多种语言维护一些静态 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>

但如果你用 "it,en" 运行它会产生:

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

由于没有可用的意大利语翻译,第二段又回到了英语。 (参数“it,en”表示按优先顺序使用的语言。)

有人知道符合要求的工具吗?如果允许与上述类似的内容,我会考虑更深奥的内容*,例如 HAML。

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

【问题讨论】:

  • “de,en”示例与行为或“it,en”示例不匹配,以至于没有英语“你今天想去哪里?”显示文本。这是不是一个错误。另外,您的语言内容是否存储在数据库中?
  • “de,en”表示先使用“de”,如果没有“de”则使用“en”。 (对于更复杂的,你可以有更多。例如,“en-AU,en-GB,en”。)我的语言内容在静态 HTML 文件中。
  • 不能直接用JavaScript写你想要的内容吗?您可以隐藏所有文本并按需编写...
  • 顺便说一句。 HTML 和 XML 中的 ID 属性在文件中应该是唯一的。

标签: html internationalization preprocessor generator


【解决方案1】:

你可以写一个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>

【讨论】:

  • 有什么特别的理由不赞成这个吗? XML/XSL 是一个明显的选择,这个答案的唯一问题是缺乏好的例子。
  • 添加了示例。现在你明白我在说什么了)
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多