Big*_*gjo 6 xml xslt internationalization
我正在尝试使用xml/xsl以不同语言编写页面.我想只有一个xml和一个xsl.在我的页面上Url我有一个参数pLanguage,我想我可以用它来查看我是否选择了英语或荷兰语.
我尝试使用此代码,但我不知道如何将它放在一起:
首先,我创建所有必须翻译的单词的变量,如下所示:
<xsl:variable name="lang.pageTitle" select="'This is the title in English'"/>
Run Code Online (Sandbox Code Playgroud)
要获取模板中的pageTitle,我现在可以使用
<xsl:value-of select="$lang.pageTitle"/>
Run Code Online (Sandbox Code Playgroud)
我想用if-else语句替换上面的第一行代码来测试我选择的语言是EN还是NL,如下所示:
<xsl:choose>
<xsl:when test="$choosenLanguage = ‘NL’">
<xsl:variable name="lang.pageTitle" select="Titel in het nederlands'"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="lang.pageTitle" select="'This is the title in English'"/>
</xsl:otherwise>
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)
但我收到错误:java.lang.IllegalArgumentException:无法解析参数号$ lang.opdracht
这是一个如何以通用方式完成此操作的完整示例:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my" exclude-result-prefixes="my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pLang" select="'nl'"/>
<my:texts>
<pageTitle lang="en">This is the title in English</pageTitle>
<pageTitle lang="nl">Titel in het nederlands</pageTitle>
</my:texts>
<xsl:variable name="vTexts" select="document('')/*/my:texts"/>
<xsl:template match="/">
<html>
<title>
<xsl:value-of select="$vTexts/pageTitle[@lang = $pLang]"/>
</title>
</html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
$pLang当此转换应用于任何 XML 文档(未使用)时,会产生所需的正确结果(标题根据全局/外部参数生成):
<html>
<title>Titel in het nederlands</title>
</html>
Run Code Online (Sandbox Code Playgroud)
请注意:
建议将所有字符串保存在与 XSLT 样式表文件分开的 XML 文档中。这允许在不更改 XSLT 代码的情况下修改/添加/删除字符串。
要从另一个 XML 文档访问字符串,代码几乎保持不变,唯一的区别是函数的参数document()现在是字符串 XML 文档的 URI。