HTML генератор, который обрабатывает несколько (разговорных) языков - PullRequest
0 голосов
/ 17 июня 2011

Мне нужно поддерживать некоторые статические 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 в качестве вывода.

1 Ответ

0 голосов
/ 17 июня 2011

Вы можете написать шаблон XSLT , который делает это.

Edit: Вот пример шаблона 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...