2012-01-25 9 views
1

XMLデータをXSL-FOに変換するXSLTスタイルシートがあります(これはApache FOPを使用してPDFとしてレンダリングされます)。外部XML文書を使用してXSLT出力をローカライズ

今、出力をいくつかの異なる言語にローカライズする必要があります。たとえば、XSLTによって生成されたテーブルの列ヘッダーをローカライズする必要があります。ここでは、列のキャプションとテーブルヘッダーを生成するXSLTの単純化された抜粋です「日付」「名前」「何か」

... 
    <fo:table> 
    <fo:table-header> 
     <fo:table-row> 
     <fo:table-cell> 
      <fo:block>Date</fo:block> 
     </fo:table-cell> 
     <fo:table-cell> 
      <fo:block>Name</fo:block> 
     </fo:table-cell> 
     <fo:table-cell> 
      </fo:block>Something</fo:block> 
     </fo:table-cell> 
     </fo:table-row> 
    </fo:table-header> 
    </fo:table-body> 
     <xsl:apply-templates select="item"/> 
    </fo:table-body> 
    </fo:table> 
    ... 

我々はすでに他の部分での国際化のためのTMXファイルを使用していますそれはシステムの自然な方法のように思えます。だから、基本的に私はTMXファイル内の文字列を参照してXSLTでハードコーディングされた列ヘッダを交換したいと思います

<tmx version="1.4b"> 
    <body> 
    <tu tuid="DATE"> 
     <tuv xml:lang="en"><seg>Date</seg></tuv> 
     <tuv xml:lang="sv"><seg>Datum</seg></tuv> 
    </tu> 
    <tu tuid="NAME"> 
     <tuv xml:lang="en"><seg>Name</seg></tuv> 
     <tuv xml:lang="sv"><seg>Namn</seg></tuv> 
    </tu> 
</body> 
</tmx> 

:ここでは、2つの言語での文字列のカップルとTMXファイルの簡単な例を示します(属性、属性を使用して)、同じXSLTが異なる言語で出力を生成できるようになりました。

しかし、私はXSLTでTMXファイルを使用する方法に関するリソースを見つけることができないようです。いくつかの良いチュートリアルへの例や指針は非常に高く評価されます。

+0

翻訳のためのXML形式のように聞こえる。どのように見えるかを例に挙げてもらえますか?私はあなたが行くときに必要なデータを取得するドキュメント関数を使用して外部ファイルとしてアクセスすることをお勧めします。 – grtjn

+0

列見出しを生成するXSLTのスニペットを与えることはできますか? TMXファイルにデータを含めるために現在行っていることをどのように拡張するかを示す方が簡単かもしれません。また、可能であれば、関連するデータを含むTMXファイルのフラグメントが有用である。それは多くの人がよく知っている標準ではありません。 – Flynn1179

+0

Flynn1179&grtjn、返信ありがとうございます。詳細については、編集済みの記事を参照してください。 – Rolf

答えて

3

XSLTのテキストは、翻訳された文字列をXMLドキュメントから読み取ることによってローカライズされている可能性があります。数値はローカライズされている場合もあります。

XMLドキュメントには、言語ごとに1つのXMLドキュメントを含む言語、またはすべての言語を含む単一のXMLドキュメントのいずれかを含むことができます。次の例のXML形式は、すべての言語のMicrosoft .NETリソース(.resx)ファイル(言語ごとに1つのファイル)または単一のTMX(翻訳メモリ交換)ドキュメントに続きます。ただし、テキストを読み取るために使用されたXPathが一貫している限り、どの形式でも使用できます。

両方のオプションは、XPath 'document'関数を使用して、変換された文字列でXMLを読み取ります。 XSLTで使用される各文字列のパラメータを定義します。変数ではなくパラメータを使用すると、XSLTが変換されたときに値をオーバーライドできます。翻訳されたテキストを表示するにはxsl:value-ofを使用してください。トランスフォームが処理されると、言語コード(たとえば、 'fr')とURLが目的の言語のリソースXMLドキュメントに渡されます。

http://www.codeproject.com/Articles/338731/LocalizeXSLTの完全機能サンプルについては、私の記事「How to localize XSLT」を参照してください。

+0

優れたチュートリアル、Doug。まだ試してみませんでしたが、探していたもののように見えます。 – Rolf

関連する問題