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

使用外部XML文档本地化XSLT输出,xslt,localization,internationalization,xsl-fo,tmx,Xslt,Localization,Internationalization,Xsl Fo,Tmx,我有一个XSLT样式表,它将XML数据转换为XSL-FO(然后使用ApacheFop将其呈现为PDF) 现在,我需要将输出本地化为几种不同的语言。例如,XSLT生成的表的列标题需要本地化。下面是XSLT的一个简化片段,它生成一个带有列标题“Date”、“Name”和“Something”的表头: 。。。 日期 名称 某物 ... 我们已经在系统的其他部分使用文件进行国际化,所以这似乎是一种自然的方式。下面是一个TMX文件的简化示例,其中包含两种语言的两个字符串: <tmx version

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

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

。。。
日期
名称
某物
...
我们已经在系统的其他部分使用文件进行国际化,所以这似乎是一种自然的方式。下面是一个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结合使用的资源。非常感谢一些优秀教程的示例或指针。

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

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

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


有关完整的功能性示例,请参阅我在“”上的文章。

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

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

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


有关完整的功能示例,请参阅我在“”上的文章。

听起来像是用于翻译的XML格式。你能举例说明这些在你的情况下是什么样子的吗?我认为您最好使用document函数将它们作为外部文件访问,并在访问过程中检索所需的数据。您能给出生成列标题的XSLT片段吗?演示如何扩展当前正在执行的操作以将数据包含在TMX文件中可能更容易。此外,如果可能的话,TMX文件的片段和相关数据将是有用的;这不是很多人熟悉的标准。Flynn1179&grtjn,谢谢回复。有关更多详细信息,请参阅编辑后的文章。听起来像是用于翻译的XML格式。你能举例说明这些在你的情况下是什么样子的吗?我认为您最好使用document函数将它们作为外部文件访问,并在访问过程中检索所需的数据。您能给出生成列标题的XSLT片段吗?演示如何扩展当前正在执行的操作以将数据包含在TMX文件中可能更容易。此外,如果可能的话,TMX文件的片段和相关数据将是有用的;这不是很多人熟悉的标准。Flynn1179&grtjn,谢谢回复。有关更多详细信息,请参阅编辑后的文章。道格,非常好的教程。我还没有试过,但它看起来正是我想要的。非常好的教程,道格。我还没有试过,但它看起来正是我想要的。
<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>