1

我有一个 XSLT 样式表,可将 XML 数据转换为 XSL-FO(然后使用 Apache FOP 将其呈现为 PDF)。

现在,我需要将输出本地化为几种不同的语言。例如,XSLT 生成的表的列标题需要本地化。下面是 XSLT 的简化片段,它生成了一个带有列标题"Date""Name""Something"的表头:

  ...
  <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 文件的简化示例,其中包含两种语言的几个字符串:

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

所以基本上我想用对 TMX 文件中的字符串的引用(使用tuid属性)替换 XSLT 中的硬编码列标题,以便相同的 XSLT 可以产生不同语言的输出。

但我似乎找不到任何关于如何将 TMX 文件与 XSLT 一起使用的资源。一些好的教程的例子或指针将不胜感激。

4

1 回答 1

5

XSLT 中的文本可以通过从 XML 文档中读取已翻译的字符串来本地化。数字也可以本地化。

XML 文档可以包含一种语言,每种语言都有一个 XML 文档,或者,一个 XML 文档可以包含所有语言。以下示例中的 XML 格式遵循 Microsoft .NET 资源 (.resx) 文件(每种语言一个文件)或具有所有语言的单个 TMX(翻译记忆库交换)文档。但是,只要用于读取文本的 XPath 是一致的,就可以使用任何格式。

这两个选项都使用 XPath ' document' 函数来读取带有已翻译字符串的 XML。为 XSLT 中使用的每个字符串定义参数。使用参数而不是变量允许在转换 XSLT 时覆盖这些值。用于xsl:value-of显示翻译后的文本。处理转换后,将语言代码(例如“fr”)和 URL 传递到所需语言的资源 XML 文档。

在http://www.codeproject.com/Articles/338731/LocalizeXSLT上查看我关于“如何本地化 XSLT ”的文章以获取完整的功能示例。

于 2012-01-29T00:40:21.963 回答