6

xml/xsl を使用してさまざまな言語でページを作成しようとしています。1 つの xml と 1 つの xsl のみが必要です。私のページの URL には、英語またはオランダ語を選択したかどうかを確認するために使用できるパラメーター pLanguage があります。

このコードを試してみましたが、どのようにまとめたかわかりません:

最初に、次のように翻訳する必要があるすべての単語の変数を作成します。

<xsl:variable name="lang.pageTitle" select="'This is the title in English'"/>

テンプレートで pageTitle を取得するには、今すぐ使用できます

<xsl:value-of select="$lang.pageTitle"/>

上記のコードの最初の行を、次のように 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>

しかし、エラーが発生します: java.lang.IllegalArgumentException: 引数番号 $lang.opdracht を解析できません

4

2 に答える 2

3

これを一般的な方法で行う方法の完全な例を次に示します

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

この変換がXMLドキュメント(使用されていない)に適用されると、必要な正しい結果(タイトルはグローバル/外部パラメーターに従って生成されます$pLang)が生成されます。

<html>
   <title>Titel in het nederlands</title>
</html>

注意してください

すべての文字列は、XSLTスタイルシートファイルとは別のXMLドキュメントで維持することをお勧めします。これにより、XSLTコードを変更せずに、文字列を変更/追加/削除できます。

別のXMLドキュメントから文字列にアクセスするためのコードはほとんど同じですが、唯一の違いは、document()関数への引数が文字列XMLドキュメントへのURIであるということです。

于 2012-08-23T12:27:50.547 に答える