【问题标题】:Using external XML document to localize XSLT output使用外部 XML 文档本地化 XSLT 输出
【发布时间】:2012-02-18 18:54:40
【问题描述】:

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

现在,我需要将输出本地化为几种不同的语言。例如,XSLT 生成的表的列标题需要本地化。这是 XSLT 的简化 sn-p 生成带有列标题 "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>

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

但我似乎找不到任何有关如何将 TMX 文件与 XSLT 一起使用的资源。非常感谢提供一些好的教程的示例或指针。

【问题讨论】:

  • 听起来像是一种用于翻译的 XML 格式。你能举例说明这些在你的情况下是什么样子吗?我认为您最好使用文档功能将它们作为外部文件访问,随时检索您需要的数据..
  • 你能提供一个生成列标题的 XSLT 的 sn-p 吗?演示如何扩展您当前正在执行的操作以将数据包含在 TMX 文件中可能会更容易。此外,如果可能的话,带有相关数据的 TMX 文件片段将是有用的;这不是许多人熟悉的标准。
  • Flynn1179 & grtjn,感谢您的回复。有关详细信息,请参阅编辑后的帖子。

标签: xslt localization internationalization xsl-fo tmx


【解决方案1】:

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

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

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

请参阅我关于“How to localize XSLT”的文章以获取完整的功能示例,网址为http://www.codeproject.com/Articles/338731/LocalizeXSLT

【讨论】:

  • 优秀的教程,道格。还没有尝试过,但它看起来正是我想要的。
猜你喜欢
  • 2018-12-27
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多