Форматирование строки с помощью XML и XSLT, как sptrinf () в PHP - PullRequest
0 голосов
/ 02 ноября 2010

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

Кстати, этот сайт является динамическим, поэтому будет иметь, например, строку типа Hello ipalaus! на английском языке, например Bienvenido ipalaus! и т. Д.В этом случае у нас тот же порядок слов, но в некоторых случаях, вероятно, будет имя строки , имя строки , строка имени строки ...

В любом случае, можно ответить, что sprintf() делает в PHP?В PHP у нас есть это:

<?php
$name = "ipalaus";
$string = "Welcome %s";

echo sprintf($string, $name);

// OUTPUTS: Welcome ipalaus
?>

Я хотел бы иметь в моем index.en.xml что-то вроде:

<language>
    <welcome>Welcome %s</welcome>
</language>

В моем index.xml , созданный с помощью PHP, будет иметь:

<index>
    <locale>en</locale>

    <welcome>ipalaus</welcome>
</index>

и в файле XSLT представляют Welcome ipalaus .

На самом деле,в моем файле XSLT я использую это для загрузки языка:

<xsl:param name="language" select="document(concat('../lang/', $locale, '/index.xml'))" />

Доступ к значениям с помощью: <xsl:value-of select="$base/language/welcome" />.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Пример для вопроса к Алехандро о его полностью действительный ответ:

<index>
    <video>
        <author>ipalaus</author>
    </video>
    <video>
        <author>Alejandro</author>
    </video>
</index>

И языковой файл:

<language>
    <video>
        <made>This videos is made by <author/></made>
        <random>Another string</random>
    </video>
</language>

1 Ответ

1 голос
/ 02 ноября 2010

Как пример, это index.xml:

<index> 
    <locale>en</locale> 
    <name>ipalaus</name> 
</index> 

И это index.en.xml:

<language>
    <welcome>Welcome <name/></welcome>
</language>

Затем эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="pLayoutURI" select="'index.en.xml'"/>
    <xsl:variable name="vData" select="/index"/>
    <xsl:variable name="vLayout" select="document($pLayoutURI,/)/language"/>
    <xsl:template match="/">
        <html>
            <h1><xsl:apply-templates select="$vLayout/welcome"/></h1>
        </html>
    </xsl:template>
    <xsl:template match="language/*/*[not(node())]">
        <xsl:value-of select="$vData/*[name()=name(current())]"/>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<html>
    <h1>Welcome ipalaus</h1>
</html>

EDIT : эта таблица стилей

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="pLayoutURI" select="'index.en.xml'"/>
    <xsl:variable name="vLayout" select="document($pLayoutURI,/)/language"/>
    <xsl:template match="/index">
        <ul>
            <xsl:apply-templates/>
        </ul>
    </xsl:template>
    <xsl:template match="video">
        <li>
            <video src="{url}">
                <xsl:attribute name="title">
                    <xsl:apply-templates select="$vLayout/video/made/node()"
                                         mode="populate">
                        <xsl:with-param name="pContext" select="."/>
                    </xsl:apply-templates>
                </xsl:attribute>
            </video>
        </li>
    </xsl:template>
    <xsl:template match="language//*[not(node())]" mode="populate">
        <xsl:param name="pContext" select="/.."/>
        <xsl:value-of select="$pContext/*[name()=name(current())]"/>
    </xsl:template>
</xsl:stylesheet>

с этим входом:

<index>
    <video>
        <author>ipalaus</author>
        <url>ipalaus.mpg</url>
    </video>
    <video>
        <author>Alejandro</author>
        <url>Alejandro.mpg</url>
    </video>
</index>

и с этим внешним источником index.en.xml:

<language>
    <video>
        <made>This videos is made by <author/></made>
        <random>Another string</random>
    </video>
</language>

Вывод:

<ul>
   <li>
      <video src="ipalaus.mpg" title="This videos is made by ipalaus"/>
   </li>
   <li>
      <video src="Alejandro.mpg" title="This videos is made by Alejandro"/>
   </li>
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...