我正在进行正确的转型以开发多语种网站。本网站的所有文本都需要从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文件。
提前谢谢你,抱歉学校英语。
答案 0 :(得分:2)
此样式表:
<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 :(得分:1)
特定于语言的输入文件:
此文件将被转换。除了样式表处理指令外,它还将实际语言作为参数传递给样式表。
<?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>