TMX怎么导出JSON:详细步骤与实用指南
在本地化、翻译项目管理或跨语言数据交换中,TMX(Translation Memory eXchange)格式是常见的翻译记忆库文件,用于存储翻译单元(原文与译文对),而JSON(JavaScript Object Notation)则以轻量级、易读、机器友好等优势,成为Web开发和数据交互的主流格式,将TMX导出为JSON,能更方便地与系统集成、进行数据分析或实现多语言内容的动态展示,本文将详细介绍TMX导出JSON的多种方法,包括工具选择、操作步骤及注意事项,助你高效完成格式转换。
理解TMX与JSON的核心差异
在开始转换前,需明确两种格式的结构特点,以便正确处理数据映射:
-
TMX格式:基于XML标准,核心结构包含
<tmx>根节点,内嵌<tu>(翻译单元)和tuv(翻译单元变体),每个tuv包含<seg>(片段,即原文或译文)及语言属性(如xml:lang="en"表示英语),示例片段如下:<tmx version="1.4"> <body> <tu tuid="001" creationdate="2023-10-01"> <tuv xml:lang="en"> <seg>Hello World</seg> </tuv> <tuv xml:lang="zh"> <seg>你好世界</seg> </tuv> </tu> </body> </tmx> -
JSON格式:采用键值对结构,数据以嵌套对象或数组存储,适合机器解析,转换后的TMX数据通常需映射为“原文-译文-语言ID”的结构,
[ { "id": "001", "source": { "lang": "en", "text": "Hello World" }, "target": { "lang": "zh", "text": "你好世界" } } ]
方法一:使用专业翻译工具(推荐:Trados、MemoQ)
专业CAT(计算机辅助翻译)工具原生支持TMX处理,且具备导出JSON的功能,适合批量处理或复杂场景。
以Trados Studio为例:
-
导入TMX文件
打开Trados Studio,点击“主页”→“导入文件”,选择TMX格式文件,确认导入(工具会自动解析TMX结构)。 -
创建目标JSON格式
- 进入“文件”→“设置”→“文件类型”,点击“添加文件类型”,选择“JSON”作为目标格式。
- 配置JSON模板:在“JSON结构”中定义键名(如
"source"、"target"),并映射语言字段(如"lang": "en"对应原文语言)。
-
导出为JSON
选择已导入的TMX文件,点击“文件”→“导出”,选择JSON格式,保存文件,工具会自动将TMX中的翻译单元转换为JSON数组结构。
优点:
- 无需手动编写代码,适合非技术人员;
- 支持批量处理,保留TMX的元数据(如创建时间、翻译单元ID);
- 可自定义JSON模板,灵活适配目标系统需求。
缺点:
- 专业工具(如Trados)价格较高,免费版本功能有限;
- 需要学习工具操作,有一定上手成本。
方法二:使用开源脚本(Python + lxml库)
对于技术用户或需要定制化转换的场景,通过Python脚本解析TMX并生成JSON是更灵活的选择。
准备工作:
安装Python依赖库:
pip install lxml json
示例脚本:
import json
from lxml import etree
def tmx_to_json(tmx_file, output_file):
# 解析TMX文件
tree = etree.parse(tmx_file)
root = tree.getroot()
# 定义命名空间(TMX通常包含XML命名空间)
namespaces = root.nsmap
# 提取翻译单元
translation_units = []
for tu in root.xpath(".//tu", namespaces=namespaces):
tu_id = tu.get("tuid")
source_text = None
target_text = None
source_lang = None
target_lang = None
# 提取原文和译文(假设第一个tuv是原文,第二个是译文)
tuvs = tu.xpath(".//tuv", namespaces=namespaces)
if len(tuvs) >= 2:
# 原文(如en)
source_tuv = tuvs[0]
source_lang = source_tuv.get("{http://www.w3.org/XML/1998/namespace}lang")
source_seg = source_tuv.xpath(".//seg", namespaces=namespaces)
if source_seg:
source_text = source_seg[0].text.strip()
# 译文(如zh)
target_tuv = tuvs[1]
target_lang = target_tuv.get("{http://www.w3.org/XML/1998/namespace}lang")
target_seg = target_tuv.xpath(".//seg", namespaces=namespaces)
if target_seg:
target_text = target_seg[0].text.strip()
if source_text and target_text:
translation_units.append({
"id": tu_id,
"source": {
"lang": source_lang,
"text": source_text
},
"target": {
"lang": target_lang,
"text": target_text
}
})
# 保存为JSON文件
with open(output_file, "w", encoding="utf-8") as f:
json.dump(translation_units, f, ensure_ascii=False, indent=2)
print(f"转换完成!JSON文件已保存至:{output_file}")
# 使用示例
tmx_to_json("input.tmx", "output.json")
脚本说明:
- 通过
lxml解析TMX的XML结构,提取<tu>(翻译单元)和tuv(语言片段); - 自动识别语言属性(如
xml:lang="en"),并区分原文与译文; - 将数据转换为JSON数组格式,并保存为UTF-8编码文件(避免中文乱码)。
优点:
- 免费、灵活,可自定义JSON结构(如添加元数据字段);
- 适合自动化流程(如定时转换、批量处理);
- 无需依赖专业工具,只需Python环境。
缺点:
- 需要基础Python知识,调试成本较高;
- 复杂TMX文件(如多语言、嵌套结构)需调整XPath表达式。
方法三:使用在线转换工具(适合轻量级需求)
对于偶尔需要转换且文件较小的场景,在线TMX转JSON工具是便捷选择。
推荐工具:
- Convertio(https://convertio.co/zh/tmx-json/)
- Online XML to JSON(https://xmljson.com/)
- Aloha Converter(支持TMX转JSON等多种格式)
操作步骤(以Convertio为例):
- 打开Convertio官网,选择“TMX转JSON”转换类型;
- 上传TMX文件(支持拖拽或本地文件选择);
- 点击“转换”,等待处理完成;
- 下载生成的JSON文件。
优点:
- 无需安装软件,浏览器即可操作;
- 适合非技术用户,操作简单。
缺点:
- 文件大小限制(通常不超过50MB);
- 隐私风险:敏感数据不建议通过在线工具处理;
- 自定义程度低,难以调整JSON结构。
注意事项与常见问题
-
编码问题
TMX文件通常为UTF-8编码,若出现JSON乱码,需确保脚本或工具保存时使用UTF-8编码(如Python中encoding="utf-8"参数)。 -
语言字段映射
部分TMX文件可能使用语言代码缩写(如"en"、"zh-CN"),需与目标系统的语言规范一致,必要时可在脚本中添加语言代码转换逻辑(如"zh"→"zh-CN")。 -
多语言支持
若TMX包含3种及以上语言(如原文、译文、审校译文),需在JSON中扩展字段(如"reviewed": {"lang": "zh-CN", "text": "你好世界(审校版)"})。 -
元数据保留
若需保留TMX的创建时间、译者等元数据,可在JSON中添加"metadata"字段,{ "id": "001", "metadata": { "creationdate": "2023-10-01", "translator": "John" }, "source": {...}, "target": {...} }



还没有评论,来说两句吧...