什么是XLIFF?
**XLIFF(XML Localization Interchange File Format,XML本地化交换文件格式)**是一种基于XML的开放标准,设计用于存储可本地化数据并在本地化过程的不同步骤之间传输。由OASIS标准化,XLIFF使得可翻译内容能够在不同工具之间交换,而不受原始文件格式的限制。
与存储已完成翻译的TMX不同,XLIFF设计为活跃翻译过程的工作格式,承载源内容、翻译和工作流程元数据。
XLIFF版本
XLIFF 1.2(2008)
最广泛采用的版本:
- 成熟稳定的规范
- 广泛的工具支持
- 丰富的内联元素支持
- 仍是行业主力
XLIFF 2.0(2014)/ 2.1(2018)
采用模块化架构的现代重新设计:
- 更清晰、更简单的核心
- 模块化扩展
- 更好定义的语义
- 采用率不断增长
XLIFF结构
基本XLIFF 1.2结构
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" target-language="zh"
datatype="plaintext" original="example.txt">
<body>
<trans-unit id="1">
<source>Hello, world!</source>
<target>你好,世界!</target>
</trans-unit>
</body>
</file>
</xliff>
基本XLIFF 2.x结构
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0"
version="2.0" srcLang="en" trgLang="zh">
<file id="f1" original="example.txt">
<unit id="1">
<segment>
<source>Hello, world!</source>
<target>你好,世界!</target>
</segment>
</unit>
</file>
</xliff>
关键元素(XLIFF 1.2)
| 元素 | 描述 |
|---|---|
<xliff> | 带版本的根元素 |
<file> | 单个文件的容器 |
<body> | 包含翻译单元 |
<trans-unit> | 单个可翻译片段 |
<source> | 原始文本 |
<target> | 翻译文本 |
<note> | 给翻译人员的注释 |
<alt-trans> | 替代翻译 |
关键元素(XLIFF 2.x)
| 元素 | 描述 |
|---|---|
<xliff> | 带srcLang、trgLang的根元素 |
<file> | 文件内容的容器 |
<unit> | 可翻译单元 |
<segment> | 源文-译文对 |
<source> | 原始内容 |
<target> | 翻译 |
<notes> | 注释容器 |
<note> | 单个注释 |
File元素属性
XLIFF 1.2
<file
source-language="en-US"
target-language="zh-CN"
datatype="html"
original="index.html"
product-name="MyApp"
product-version="2.0"
build-num="1234">
XLIFF 2.x
<file
id="f1"
original="index.html">
在2.x中,语言代码移到了根<xliff>元素。
Trans-Unit / Unit状态
翻译状态(XLIFF 1.2)
| 状态 | 含义 |
|---|---|
new | 尚未翻译 |
needs-translation | 需要翻译 |
needs-review-translation | 翻译需要审核 |
translated | 翻译完成 |
final | 已批准且最终 |
signed-off | 正式签字 |
带状态的示例
<trans-unit id="1" state="needs-review-translation">
<source>Welcome</source>
<target state="needs-review-translation">欢迎</target>
</trans-unit>
内联元素
XLIFF支持丰富的内联标记:
XLIFF 1.2内联标签
| 标签 | 描述 | 示例 |
|---|---|---|
<g> | 通用组 | <g id="1">粗体</g> |
<x> | 通用占位符 | <x id="1"/> |
<bx> | 开始配对标签 | <bx id="1"/> |
<ex> | 结束配对标签 | <ex id="1"/> |
<bpt> | 开始配对标签(带内容) | <bpt id="1"><b></bpt> |
<ept> | 结束配对标签(带内容) | <ept id="1"></b></ept> |
<ph> | 占位符 | <ph id="1">{0}</ph> |
<it> | 独立标签 | <it id="1"><br/></it> |
带内联标签的示例
<trans-unit id="msg1">
<source>Click <g id="1">here</g> to continue.</source>
<target>点击<g id="1">这里</g>继续。</target>
</trans-unit>
元数据和注释
添加注释
<trans-unit id="1">
<source>File</source>
<target>文件</target>
<note from="developer">菜单项标签</note>
<note from="translator">上下文:主菜单</note>
</trans-unit>
上下文组
<trans-unit id="1">
<source>OK</source>
<context-group name="location">
<context context-type="sourcefile">dialog.cpp</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
XLIFF 2.x模块
XLIFF 2.0+使用模块化扩展:
| 模块 | 用途 |
|---|---|
| Translation Candidates | 替代翻译 |
| Glossary | 术语定义 |
| Format Style | 格式信息 |
| Metadata | 自定义元数据 |
| Resource Data | 外部资源 |
| Change Tracking | 修订历史 |
| Size Restriction | 长度限制 |
| Validation | QA规则 |
XLIFF vs TMX
| 方面 | XLIFF | TMX |
|---|---|---|
| 用途 | 本地化工作流程 | TM存储/交换 |
| 内容 | 正在翻译的文档 | 已完成的翻译 |
| 元数据 | 面向工作流程 | 面向TM |
| 结构 | 层次化(文件、单元) | 扁平(仅TU) |
| 状态 | 跟踪翻译进度 | 无状态跟踪 |
| 使用 | 活跃项目 | 存档/参考 |
最佳实践
创建XLIFF文件
选择正确的版本
- XLIFF 1.2获得最大兼容性
- XLIFF 2.x用于现代工作流程
保留上下文
- 包含文件路径信息
- 添加有意义的注释
- 使用上下文组
正确分段
- 每个片段一个可翻译单元
- 保留内联格式
- 包含用于跟踪的ID
处理XLIFF
验证结构
- 检查XML格式正确性
- 根据模式验证
处理状态
- 跟踪翻译进度
- 适当更新状态
保留内联元素
- 保持标签顺序
- 正确匹配标签ID
常见问题
XLIFF和TMX有什么区别?
XLIFF设计用于活跃的本地化工作流程——它承载正在翻译的文档及其所有元数据和上下文。TMX用于存储和交换已完成的翻译(翻译记忆)。您在XLIFF中工作,在TMX中存储。
应该使用哪个XLIFF版本?
XLIFF 1.2提供最大的工具兼容性。XLIFF 2.x更清晰、更现代,但支持范围较小。在选择之前检查您的工具链。
XLIFF可以存储翻译记忆吗?
XLIFF不是为TM存储设计的,但XLIFF 2.x有Translation Candidates模块可以存储替代翻译。对于TM,请使用TMX。
如何将文件转换为XLIFF?
大多数CAT工具可以从各种格式(DOCX、HTML等)提取内容到XLIFF。像Okapi Framework这样的专用工具为许多文件类型提供过滤器。
本地化必须使用XLIFF吗?
不是必须的,但非常有益。XLIFF提供了一种标准方式来在不同工具和团队之间共享本地化项目,提高互操作性。
XLIFF可以处理复杂格式吗?
可以,XLIFF有丰富的内联元素支持来处理格式、占位符和标记。正确的内联处理是保留文档结构的关键。
