2

私は次のような URL 構造を持つ多言語サイトを持っています:www.mysite/en/home.htmまたはwww.mysite/es/home.htm(英語版とスペイン語版の場合)。

この home.htm には、xml ファイルからのテーブル データがあります。このテーブル のヘッダーは<th>、xsl ファイルに含まれています。

URLで検出する言語に応じて、これらの値を動的に変更したいと思い/es/ます。

  • URL = www.mysite/en/home.htm の場合
  • 説明
  • ゲームの種類
  • ....

  • URL = www.mysite/es/home.htm の場合

  • 説明
  • ティーポ デ フエゴ
  • ....

誰でも私を助けることができますか?ありがとう!

4

1 に答える 1

2

この変換:

<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="pUrl" select="'www.mysite/es/home.htm '"/>

 <my:headings>
  <h lang="en">
    <description>Description</description>
    <gameType>Game Type</gameType>
  </h>
  <h lang="es">
    <description>Descripción</description>
    <gameType>Tipo De Juego</gameType>
  </h>
 </my:headings>

 <xsl:variable name="vHeadings" select="document('')/*/my:headings/*"/>

 <xsl:template match="/">

  <xsl:variable name="vLang" select=
    "substring-before(substring-after($pUrl, '/'), '/')"/>

     <table>
       <thead>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/description"/></td>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/gameType"/></td>
       </thead>
     </table>
 </xsl:template>
</xsl:stylesheet>

任意の XML ドキュメント (使用されていない) に適用すると、必要な見出しが生成されます

<table>
   <thead>
      <td>Descripción</td>
      <td>Tipo De Juego</td>
   </thead>
</table>

: 実際のアプリでは、言語固有のデータを別の XML ファイル (またはファイル - 言語ごとに 1 つ) に入れたい場合があります。そのような場合は、への呼び出しを少し変更するだけで済みます。document()このコードで機能します。

更新

OP はコメントで、document()彼の環境では の使用が禁止されていることを示しています。

を使用せずに動作するようにわずかに変更した同じソリューションを次に示しますdocument()

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrl" select="'www.mysite/es/home.htm '"/>

 <xsl:variable name="vrtfHeadings">
  <h lang="en">
    <description>Description</description>
    <gameType>Game Type</gameType>
  </h>
  <h lang="es">
    <description>Descripción</description>
    <gameType>Tipo De Juego</gameType>
  </h>
 </xsl:variable>

 <xsl:variable name="vHeadings" select="ext:node-set($vrtfHeadings)/*"/>

 <xsl:template match="/">

  <xsl:variable name="vLang" select=
    "substring-before(substring-after($pUrl, '/'), '/')"/>

     <table>
       <thead>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/description"/></td>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/gameType"/></td>
       </thead>
     </table>
 </xsl:template>
</xsl:stylesheet>
于 2012-05-08T12:23:50.637 に答える