Включить языковые файлы (как XML) в XSLT - PullRequest
1 голос
/ 10 сентября 2010

Я делаю правильные преобразования для разработки многоязычного веб-сайта.Весь текст этого веб-сайта должен быть взят из XML-файла, потому что результатом работы сайта будет обработанный файл.

Это основные файлы, index.xml :

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xsl/index.xsl"?>
<page>
    <entry>
        <id>12</id>
        <value>img/12.jpg</value>
    </entry>
    <entry>
        <id>13</id>
        <value>img/13.jpg</value>
    </entry>
</page>

Эти записи уникальны, поэтому их не нужно переводить.Мой index.xsl :

<?xml version="1.0" encoding="UTF-8"?>   
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- I'm including a language file, but I've various language files that will be stored in different folders -->
    <xsl:param name="menu" select="document('../lang/index.xml')" />

    <xsl:template match="/">
        <html>
            <xsl:attribute name="lang"><!-- name of the lang --></xsl:attribute>

            <head></head>

            <body>
                <ul id="menu">
                    <xsl:for-each select="language/menu">
                        <li><xsl:value-of select="." /></li>
                    </xsl:for-each>
                </ul>

                <!-- this is not important, is an example -->
                <xsl:for-each select="page/entry">
                    <xsl:value-of select="id" />
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Я включаю .. / lang / index.xml , который содержит все слова на каком-либо языке, например на английском.Мне нужен этот сайт на 3 разных языках, которые можно хранить как:

/ lang / en / index.xml

<language>
    <menu>Home</menu>
    <menu>Images</menu>
</language>

/ lang / es / index.xml

<language>
    <menu>Inicio</menu>
    <menu>Imágenes</menu>
</language>

/ lang / fr / index.xml

<language>
    <menu>Maison</menu>
    <menu>Images</menu>
</language>

У меня вопрос, как мне справиться с этим.У меня нет возможности изменить это, потому что мне не разрешено делать определенный файл index.xsl для каждого языка.

Спасибо заранее и извините за школьный английский.

Ответы [ 2 ]

2 голосов
/ 10 сентября 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml"/>
    <xsl:param name="pLang" select="'es'"/>
    <xsl:param name="pMenu" 
               select="document(concat('../lang/',$pLang,'/index.xml'),/)"/>
    <xsl:template match="/">
        <html lang="{$pLang}">
            <head></head>
            <body>
                <ul id="menu">
                    <xsl:apply-templates select="$pMenu/*"/>
                </ul>
                <xsl:apply-templates select="page/entry"/>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="language/menu">
        <li>
            <xsl:value-of select="." />
        </li>
    </xsl:template>
    <xsl:template match="entry">
        <img id="{id}" src="{value}"/>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<html lang="es">
    <head></head>
    <body>
        <ul id="menu">
            <li>Inicio</li>
            <li>Imágenes</li>
        </ul>
        <img id="12" src="img/12.jpg" />
        <img id="13" src="img/13.jpg" />
    </body>
</html>
1 голос
/ 10 сентября 2010

Входной файл для конкретного языка :

Этот файл необходимо преобразовать.В дополнение к инструкции обработки таблицы стилей он также передает фактический язык в качестве параметра в таблицу стилей.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xsl/index.xsl"?>
<?xm-xsl-param name="lang" value="en"?>
<page>
  <entry>
    <id>11</id>
    <value>bla </value>
  </entry>
  <entry>
    <id>14</id>
    <value>bla bla</value>
  </entry>
</page>

Файл, не зависящий от языка

Этот файл включается сdocument функция.Обратите внимание, что для этого не требуется инструкция обработки таблицы стилей:

<?xml version="1.0" encoding="UTF-8"?>
<page>
    <entry>
        <id>12</id>
        <value>Lorem ipsum</value>
    </entry>
    <entry>
        <id>13</id>
        <value>Lorem ipsum</value>
    </entry>
</page>

XSL-преобразование:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- the external parameter with a default value -->
  <xsl:param name="lang" select="en" />

  <xsl:variable name="entries" 
                select="page/entry | document('../lang/index.xml')/page/entry" />


  <xsl:template match="/">
    <html lang="{$lang}">
      <head></head>

      <body>
        <!-- accessing an entry by its id value -->
        <xsl:value-of select="$entries[id = 12]/value"/>

        <!-- looping all entries -->
        <xsl:for-each select="$entries">
          <xsl:sort select="id" order="ascending"/>
          <xsl:value-of select="id" />
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...