原帖地址:http://www.ibm.com/developerworks/cn/xml/x-localis2/index.html
XLIFF 是用来在参与翻译项目的各方之间交换本地化数据的格式。这种特殊的格式使翻译人员能够把精力集中到所翻译的文本上,而不用担心文本的布局。XLIFF 标准得到了大量本地化服务提供商和本地化工具提供商的支持。
翻译文档时使用 XLIFF 最主要的原因是,在翻译不同类型的文档时,您可以使用单一的文件格式。
上一期文章中,我描述了本地化项目需要经过的步骤:
第 2 步中所说的专用 XML 文档就是 XLIFF 文档。本文主要讨论步骤 1、步骤 2 和步骤 4。
现在介绍使用 XLIFF 文件作为中间格式的翻译过程,步骤如图 1 所示。
该过程可以具体描述如下:
- 文本提取:从布局数据中分离出可以翻译的文本。
- 预翻译:将已有的翻译添加到上一步中生成的 XLIFF 文件中。
- 翻译:专业翻译人员进行翻译。
- 逆转换:从翻译后的 XLIFF 文件生成翻译后的文档。
- 翻译存储改进:将新的翻译保存到翻译存储(TM)数据库中,以备重用。
为了帮助翻译人员,将可翻译的文本从文本布局信息中提取出来。 清单 1 中给出了一个简单 HTML 页面的代码。该页面包含两个可翻译的句子和几个与翻译人员无关的标签。
<html> <head> <title> A Title</title> </head> <body> <p> One paragraph</p> </body> </html> |
称为 过滤程序的专门程序把文本和布局分离开。计算机辅助翻译(CAT)工具通常拥有常见格式的过滤程序,如:HTML、RTF、XML 和纯文本等。
过滤程序将不可翻译的部分保存在专门的文件中,称为 提纲。所有可翻译的句子在提纲中被替换为特殊的记号。 清单 2 的例子就是 清单 1 的文本提纲。
<html> <head> <title> %%%1%%%</title> </head> <body> <p> %%%2%%%</p> </body> </html> |
每个文本片段保存在 XLIFF 文件中的一个翻译单元元素中( <trans-unit>
)。提纲中使用的标记可以作为翻译单元的 id
属性,简化提纲和 XLIFF 文件之间的映射。
正式规范中的 XLIFF 格式非常精确、清晰和实用:
XLIFF 是一种 XML 应用,因此开头带有 XML 声明。XML 声明之后是 XLIFF 文档本身,包括在<xliff>
元素中。XLIFF 文档由一节或多节组成,每节都包围在<file>
元素中。<file>
元素包含<header>
元素,其中包括关于<file>
的元数据;<body>
元素包括从<file>
提取的可翻译文本。<trans-unit>
元素中的可翻译数据被组织成成对出现的<source>
和<target>
元素。这些<trans-unit>
元素被递归地组织到<group>
元素中。
清单 3 包含 清单 1. 中所示 HTML 文档的 XLIFF 文件。
<? xml version="1.0" ?> <xliff version="1.0"> <file original="sample.html" source-language="en" datatype="HTML Page"> <header> <skl> <external-file href="sample.skl"/> </skl> </header> <body> <trans-unit id=" %%%1%%%"> <source xml:lang="en"> A Title</source> </trans-unit> <trans-unit id=" %%%2%%%"> <source xml:lang="en"> One paragraph</source> </trans-unit> </body> </file> </xliff> |
过滤程序的复杂性取决于要解析的格式。HTML 和 XML 都是容易编制的格式。过滤程序引用特定的规范区分可翻译文本和格式化信息。字处理程序通常使用专有的文件格式。所幸的是,多数字处理程序都可以导入和导出 RTF 文档,RTF 也是容易编制的格式。
本文所附源代码包含 Java 属性文件的完整 Java 语言过滤程序实现(请参阅 参考资料)。
![]() ![]() |
![]()
|
表 1 显示了同一句子的两种版本,一种是 HTML 格式,另一种是 RTF 格式。
HTML | RTF |
This is <b>bold </b> text | This is /b bold /b0 text |
两个版本包含同样的文本,只有格式化代码不同。标记代码不需要翻译。使用 HTML 编辑器和字处理程序的翻译人员必须完成两次翻译,每种工具一次。翻译人员需要使用一种统一的工具,能够显示相关的文本、隐藏标记信息,并且无论使用何种标记能够重用翻译的结果。
文本布局信息保存在 XLIFF 标准为此目的定义的专用 行内元素(inline elements)中。 清单 4 显示了包围在相应行内元素中的 清单 1 中的标记。
注意,用于包装标记的元素是相同的,只有内容不同。这样,CAT 工具就能使用属性中提供的信息在 TM 数据库中搜索翻译。比如,如果数据库包含 HTML 版本的翻译,就可以通过自动调整 <bpt>
和 <ept>
元素的内容,并将其用于 RTF 版本。
翻译人员在使用 CAT 工具翻译时不会看到 XML 形式的行内元素。无论是图像,还是通过单击鼠标或者使用快捷键就能很容易插入的文本标记,行内元素都必须以友好的方式表示。
表 2 列出了所有行内元素及其用法的说明。
元素 | 说明 |
<g> | 通用分组占位符: <g> 元素用于替换原始文档中带有开始和结束标记,而且不与其他成对出现的行内代码交叉的的行内代码,该元素可以在父结构元素中移动 |
<x/> | 通用占位符: <x/> 元素用于替换原始文档中的任何代码 |
<bx/> | 成对起始占位符: <bx/> 元素用于代替原始文档中的成对起始代码,适用于不符合 XML 格式良好规则(即元素不重叠)的成对代码 |
<ex/> | 成对结束占位符: <ex/> 元素用于代替原始文档中的成对结束代码,适用于不符合 XML 格式良好规则(即元素不重叠)的成对代码 |
<bpt> | 成对起始标签: <bpt> 元素用来确定本机代码成对序列的开始之处。翻译单元中每个 <bpt> 都有一个对应的 <ept> 元素 |
<ept> | 成对结束标签: <ept> 元素用来确定本机代码中成对序列的结束之处。翻译单元中每个 <ept> 都有一个对应的 <bpt> 元素 |
<ph> | 占位符: <ph> 用于分隔翻译单元中原来独立的代码序列 |
<it> | 孤立标签: <it> 元素用于分隔翻译单元中没有对应开始/结束标记的本机代码的开始/结束序列 |
<mrk> | 标记: <mrk> 元素用于区分具有特殊含义的文本片段,比如术语单位、固有名称或者不需修改的项目等 |
一旦提取了要分析的文本,就需要将所有标记都包含在正确的行内元素中,然后对翻译单元进行下一步处理,即称为 分段的处理。分段就是将文本块分解成更小的可翻译文本段,比如句子、段落或短语。使翻译单位尽可能小非常重要,这样可以增加在 TM 数据库中发现可重用翻译的机会。
通常,分段程序(执行分段的工具)啊按照以下基本原则来分割文本的:
- 遇到句号或者后跟空白的停顿时分割,假定为句子或段落的结束。
- 遇到后跟空白的分号时分割,假定为联合句或者短语的结束。
- 遇到后跟空白的冒号时分割,假定为列表的开始。
在省略号后面分割需要专门考虑,因为省略号可以是缩略形式的一部分。
上述分段规则不适用于亚洲语言,如汉语、日语和韩语。
![]() ![]() |
![]()
|
实际的翻译必须由翻译人员完成。这方面机器不能代替人,无论多好的翻译程序,翻译结果都必须由人来检查以保证质量。
通过提供类似的翻译、可能的同义词、以前的文本来帮助翻译人员,专业翻译人员可以判断给出的翻译是否值得重用。
原始文档转化成 XLIFF 后,用于执行转换的工具可以遍历所有翻译单元,在 TM 数据库中查找匹配的翻译。一旦找到匹配单元,则在翻译文档中添加一个 <alt-trans>
元素。该过程通常称为 预翻译。
数据库中发现的文本不需要与翻译的文本完全相同。 清单 5 中的例子说明 HTML 和 RTF 文档中的翻译如何混合出现在翻译单元中。注意,因为标记格式的原因,第二个 <alt-trans>
元素匹配度只有 96%,但是文本却完全可以接受。
![]() ![]() |
![]()
|
在 XLIFF 文件最终准备好之后,将该文件发送给专业翻译人员。翻译人员使用支持 XLIFF 的 CAT 工具,把所有缺少的翻译添加上,并检查预翻译阶段提供的译文。
翻译后的 XLIFF 必须与提纲文件合并,形成目标输出格式的翻译文档。
过滤程序用于读入提纲,依次处理所有特殊的标记。提纲中的每个标记都使用 XLIFF 文件中的对应翻译单元校正;如果翻译单元被翻译人员注明已获得批准,那么 <target>
元素中的文本将代替提纲中的标记。如果该段没有翻译,或者包含的翻译没有被认可,则使用 <source>
元素中的文本。所有标记都使用 XLIFF 文件中的对应文本代替之后,提纲就变成了翻译后的文档,应该使用新的名称保存它。
多数文档格式都需要固定在翻译后的文档布局中,一般而言,XML、HTML 和 RTF 格式所要做的译后调整较少。
最后还剩下一项任务:从获得 XLIFF 文件批准的 <trans-unit>
元素中提取 <source>
/ <target>
对的内容,并将其保存在 TM 数据库中以备重用。这些 <source>
/ <target>
对通常保存在专门的 XML 格式中,称为 Translation Memory eXchange (TMX),所有主要的翻译工具都支持这种格式。
![]() ![]() |
![]()
|
附带的 Java 源代码(请参阅 参考资料)包含两个过滤程序:
- 将 Java 属性文件转换成 XLIFF 格式的程序。
- 从 XLIFF 到 Java 属性文件的逆转换程序。
在 Java 程序中使用属性文件来保存应用程序 GUI 显示的文本。这些属性文件是可以包含多行的文本文件,每一行可以是注释、空白行或者 <key>=<value>
记录。
示例代码中没有包含分段和预翻译例程,因为其复杂程度远远超出了本文的范围。不过,该示例代码中包含了这类程序的占位符,如果需要的话,读者可以自己去实现。
![]() ![]() |
![]()
|
本文讨论了如何将 XLIFF 用作中间文件格式来翻译文档,并通过一个例子介绍了该过程中的每个阶段。文中包含的源代码从实用的角度说明了如何实现 Java 本地化项目的 XLIFF 解决方案,这种解决方案经过扩展也可用于其他格式。
下一期文章将介绍 TM 数据库的工作原理,强调用于翻译交换的 TMX 格式的相关内容。
![]() ![]() |
![]()
|
描述 | 名字 | 大小 | 下载方法 |
---|---|---|---|
Filters to convert Java Properties files to XLIFF | x-localis2_filters.zip | 155 KB | HTTP |
![]() | ||||
![]() | 关于下载方法的信息 | ![]() |
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
- 下载文件 x-localis2_filters.zip,其中包含了将 Java Properties 文件转化成 XLIFF 及其反向操作的过滤程序的 Java 实现。
- 参阅本系列的上一篇文章“ 本地化中的 XML: 实用分析”( developerWorks,2004 年 8 月)。它介绍了 XLIFF 在本地化过程中的作用,以及 XLIFF 与其他相关 XML 标准的交互。
- 参阅 XLIFF 1.1 Specification,它定义了 XML 本地化交换文件格式(XLIFF)。该词汇表的目标是存储可本地化的数据,并将这些数据从处理过程中的上一个阶段带入下一个阶段,同时支持工具间的互操作性。
- 从 Heartsome 网站下载免费的 XLIFF 编辑器,并使用它翻译示例代码生成生成的 XLIFF 文件。
- 仔细阅读 XLIFF 1.1 的白皮书(PDF 文件, XLIFF 技术委员会,2003 年 7 月)。其中包含关于 XLIFF 标准的历史、体系结构和用法等方面的有用信,非常有趣。
- 参阅 developerWorks 文章“ Application Framework for e-business: Globalization”(2001 年 7 月),该文为以全球市场为目标的面向 Web 应用程序开发人员提供了丰富的资料。
- 在 developerWorks XML 专区 可以找到更多 XML 资源。
- 在 developerWorks Developer Bookstore 可以找到各种关于 XML 的书籍,包括 关于本地化的书籍。
- 了解如何才能成为一名 IBM 认证的 XML 及相关技术的开发人员。