如何使用xsl和xml进行I18N

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 &#61; ‘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

Dim*_*hev 4

这是一个如何以通用方式完成此操作的完整示例

<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。