使用外部 XML 文档本地化 XSLT 输出

Rol*_*olf 1 xslt localization xsl-fo internationalization tmx

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

现在,我需要将输出本地化为几种不同的语言。例如,XSLT 生成的表的列标题需要本地化。下面是生成带有列标题“Date”“Name”“Something”的表标题的 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>
  ...
Run Code Online (Sandbox Code Playgroud)

我们已经在系统的其他部分使用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>
Run Code Online (Sandbox Code Playgroud)

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

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

Dou*_*eny 5

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

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

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

请参阅我关于“如何本地化 XSLT ”的文章,获取完整的功能示例,网址为:http://www.codeproject.com/Articles/338731/LocalizeXSLT