如何翻译 RTF 文件:哪些内容能保留,哪些会丢失
翻译 RTF 文件时,段落、表格、脚注、链接和格式会发生什么变化,为什么 TextEdit 文件需要额外一步,以及一个免费检查工具。

要翻译 RTF 文件,请将整个 .rtf 文件上传到能读取 RTF 的翻译工具,然后检查结果。BookTranslator 支持 RTF。它会逐段读取文本、进行翻译,并为你生成一个新的 RTF 文件和一个双语 RTF 文件。将文本粘贴到聊天窗口或网页翻译器中对于一两页的内容也可行,但你会丢失文件,并且需要重新构建。
在上传之前,有一件事需要了解。翻译后的文件会保留你的文字和段落,但不会保留格式。粗体、标题、字体、表格、链接和图片都不会回来。因此,正确的路线取决于你的文件内容以及保存它的应用程序。从 Word 保存的纯手稿是最简单的情况。在 Mac 上由 TextEdit 保存的文件需要先额外执行一步,否则每个段落都会连在一起。
我们制作了三个测试文件,并编写了一个免费检查工具,它可以在你上传之前显示 RTF 文件中的内容,以及上传后发生了什么变化。我们使用 BookTranslator 所用的 RTF 读写代码的本地副本运行了这些测试文件,并用一个标记代替模型,这样你可以确切看到每个测试文件发送了哪些文本进行翻译,以及文件如何返回。
快速回答:文件的每个部分会发生什么
| 文件部分 | 在我们的测试中返回的结果 | 该怎么办 |
|---|---|---|
以 \par 结尾的段落(Word 和大多数 Windows 应用) | 每个段落对应一个翻译后的段落 | 无需处理 |
| 以反斜杠和换行结尾的段落(TextEdit、其他 Mac 应用) | 整个文件作为一个段落发送,每个换行处没有空格 | 先转换文件(见步骤 2) |
| 粗体、斜体、标题、字体、颜色、对齐方式 | 已移除。每个段落都是 12 磅 Times New Roman | 在 Word 中重新设置格式,或改为翻译 DOCX |
| 表格 | 单元格文本无空格连接:StopTimeNorth pier7:05 | 改为翻译 DOCX |
| 脚注 | 脚注文本被添加到其段落的末尾;脚注编号消失 | 手动将脚注移回,或翻译 DOCX |
| 页眉 | 在文件中的位置(在我们的测试中位于顶部)会变成一个普通段落 | 删除它,或保留原始页眉 |
| 链接 | 链接文字保留并翻译,网址被移除 | 重新添加链接 |
| 图片 | 已移除 | 保留原始文件以获取插图 |
带重音符号和非拉丁字符(café、日本) | 读写正确 | 无 |
| 任何由 0–9 和 a–f 组成的 20 个或以上字符的连续字符串(长参考编号、哈希值) | 翻译前删除 | 翻译后检查它们(检查器会执行此操作) |
本指南的其余部分将说明每一行的来源以及如何处理。
第 1 步:检查你拥有哪种 RTF
RTF 是一种包含格式代码的文本格式。在纯文本编辑器中打开文件,或在终端中运行 head -c 120 yourfile.rtf,然后查看第一行。
- 如果其中包含
\cocoartf,则该文件由 Apple 的文本系统保存:TextEdit 或其他使用该系统的 Mac 应用。 - 如果其中包含
\rtf1\ansi且没有\cocoartf,则最可能来自 Word、LibreOffice、WordPad 或写作应用的导出。
这一区别很重要,因为这两种类型结束段落的方式不同。Word 和大多数其他文字处理器在每个段落末尾写入代码 \par。Apple 的文本系统则在行尾写入一个反斜杠。两者都是有效的 RTF:微软 1989 年的原始 RTF 规范(镜像副本)指出,反斜杠后跟换行符与 \par 的处理方式相同,而 Apple 自己的读取器将我们的 TextEdit 测试文件显示为独立段落。BookTranslator 的 RTF 读取器仅按 \par 拆分段落。我们于 2026 年 11 月 3 日在其代码中以及下方的测试中对此进行了验证。
检查器会告诉你拥有哪种类型,以及文件中还有什么其他内容。它需要 Python 3,不需要其他任何东西:
python3 check_rtf.py sample-word-style.rtf
在我们的 Word 风格测试文件上,它打印出:
== sample-word-style.rtf
par_breaks: 7
table_cells: 4
table_rows: 2
hyperlinks: 1
fields: 1
bold_on: 2
italic_on: 1
page_breaks: 1
fonts: 2
footnotes: 1
headers: 1
images: 1
visible_paragraphs: 7
WARN 4 table cells: check that cell boundaries survive.
WARN 1 footnotes: check where this text ends up in the output.
WARN 1 headers: check where this text ends up in the output.
WARN 1 hyperlinks: the link text may survive without the URL.
WARN 1 images: keep the original for the artwork.
在 TextEdit 文件上,第一条警告是:
WARN Paragraphs end with a backslash + line break (TextEdit/Cocoa style), not \par. Tools that only split on \par will see one long paragraph.
如果检查器没有输出任何警告,你的段落、数字和文本应该都能保留下来。粗体、标题和列表不会触发警告,但它们在 RTF 处理路径中仍会被移除,所以如果你需要这些格式,请查看第 2 步。
我们的测试文件返回了什么
我们制作了三个小文件。所有文件以及返回的全部内容都在测试文件夹中。
- sample-word-style.rtf 是手写的,采用 Word 处理 RTF 的风格:
\par换行、页眉、脚注、链接、2×2 表格、小图片、分页符、以代码页字符表示的café,以及以 Unicode 码表示的日本。 - sample-textedit.rtf 是在 Mac 上用
textutil -convert rtf生成的,它使用与 TextEdit 相同的文本系统。它包含一个标题、粗体和斜体文字、一个链接、一个项目符号列表、一个表格,以及一行包含{braces}和反斜杠的文字。 - sample-long-numbers.rtf 包含一个 20 位订单编号、一个 40 字符的提交哈希和一个电话号码。
我们于 2026 年 11 月 3 日从 BookTranslator 的后端代码中复制了 RTF 读写函数,并在每个文件上运行。没有使用模型。每个将要发送翻译的段落都被替换为 [ZH] 加上原文。这准确展示了模型会收到什么以及文件如何重建,而没有真实翻译的干扰。
Word 风格的文件:六个干净的段落,但有三个意外
文件返回为六个翻译段落,顺序如下:
[ZH] Harbor Notes - Draft 2
[ZH] Chapter 3: The Harbor
[ZH] The ferry left at 6:40, an hour before the café opened. Timetable from the 1998 edition.
[ZH] Read the harbor map before you go.
[ZH] StopTimeNorth pier7:05
[ZH] Chapter 4: 日本 (Nihon)
大部分内容正是你想要的。每个段落按顺序发送一次,café 和 日本 在从 RTF 代码到文本再返回的旅程中幸存下来。三个意外是:
- 页眉变成了第一个段落。 “Harbor Notes - Draft 2” 原本是打印在每页顶部的页眉。在翻译后的文件中,它变成了正文。
- 脚注移入了句子。 “Timetable from the 1998 edition.” 原本是 “opened” 的脚注。现在它跟在句子后面,仿佛是其一部分,脚注编号消失了。翻译该段落的模型看到的是一个连续文本,你必须手动找到并移回脚注。
- 表格单元格连在一起了。 四个单元格 “Stop”、“Time”、“North pier” 和 “7:05” 变成了单个字符串
StopTimeNorth pier7:05。模型可能会在错误的位置拆分它,或者将 “StopTime” 作为一个词翻译。
翻译后的文件没有页眉、没有脚注、没有表格、没有链接地址、没有图片,也没有粗体。第 4 步中检查器的比较模式会列出所有这些。
TextEdit 文件:一个段落
TextEdit 文件有八个可见段落。它们全部作为一个段落发送翻译:
Chapter 3: The HarborThe ferry left at 6:40, an hour before the market opened.Read the harbor map before you go. • Bring cash • Keep your ticketStopTimeNorth pier7:05Ana said: "We'll wait {here}" and C:\Users\ana\notes stayed open.
每个段落结束的地方没有空格:“HarborThe”、“opened.Read”。翻译后的文件也是一个段落。我们的测试文件很短。在 TextEdit 保存的真实书籍中,整个文件会变成一个段落。翻译前,BookTranslator 会将非常长的段落切成约 6,000 字符(中文、日文或韩文约 2,000 字符)的片段,尽可能在句子结尾处切割。这些切割仍然落在段落内的句子结尾,但绝不会在缺失的段落分隔处,因为 “opened.Read” 看起来不像句子结尾。如果每个段落是单个句子,例如对话行或列表项,切割可能落在逗号或空格处。模型永远看不到段落原本的位置,你得到的是一整块文本。
最后一句中的花括号和反斜杠确实幸存了。它们在输出时被正确转义,因此文件仍然可以打开。
长数字:在翻译前被删除
第三个文件返回如下:
[ZH] Your order reference is and must be quoted in full.
[ZH] The fix landed in commit last week.
[ZH] Call +44 20 7946 0958 before 5 pm.
订单编号和提交哈希消失了,每个位置留下一个双空格。读取器会移除任何由数字 0–9 和字母 a–f 组成的 20 个或更多字符的连续字符串,因为嵌入图像数据在 RTF 中就是这样。你文本中的长数字对它来说看起来一样。电话号码幸存下来,因为其数字组很短。
这主要影响合同、发票、技术说明和带有长参考编号的记录。检查器会列出源文件中所有此类字符串,并告诉你翻译后是否有缺失。
第 2 步:为你的文件选择正确的路径
使用检查器的输出选择一个:
| 你的文件包含什么 | 最佳方案 | 原因 |
|---|---|---|
来自 Word 或其他使用 \par 的应用的纯段落 | 上传 RTF 文件 | 段落会一一对应返回;你只会丢失不需要的格式 |
来自 TextEdit(\cocoartf)的纯段落 | 先转换为 DOCX 或 TXT,然后上传该文件 | RTF 读取器会将整个文件作为一个段落发送 |
| 需要保留的标题、表格、脚注或格式 | 在 Word 或 LibreOffice 中另存为 DOCX,然后上传 DOCX 文件 | RTF 路径会重建一个纯文本文件;DOCX 则通过 Word 工作流处理 |
| 长参考编号或哈希值 | 任一路径,然后检查 | 确认每个数字都已返回 |
要在 Mac 上转换 TextEdit 文件,请打开终端并运行以下命令之一:
textutil -convert docx notes.rtf
textutil -convert txt notes.rtf
第一条命令会在原文件旁边生成 notes.docx。当我们用这种方式转换 TextEdit 测试文件时,DOCX 中每一行都是一个单独的段落,并保留了粗体和斜体文字。它没有保留表格(表格变成了单独的段落)和链接。如果你需要这些内容,请在 Word 或 LibreOffice 中打开文件并另存为 DOCX,然后在上传前检查表格。第二条命令会生成一个纯文本文件。当你只需要文字时使用它;我们的纯文本翻译指南介绍了在 TXT 文件中需要检查的内容。
对于表格、样式和页眉很重要的 Word 文档,请参阅我们的指南在保持格式的同时翻译 Word 文档。BookTranslator 在其文档翻译页面上的常见问题解答对旧版 Word .doc 文件给出了同样的建议:它会翻译文本并返回一个 RTF 文件,并建议在需要保留图片、表格或布局时先另存为 DOCX。
第 3 步:翻译整个文件
上传文件,选择目标语言,并在付款前检查价格。BookTranslator 按顺序翻译段落。对于包含重复出现的名称和术语的长文件,请在付款前开启自动术语表选项,以便它们在整个文件中以相同方式翻译。
你会得到两个文件:
- 翻译后的文件: 每个段落均为目标语言。
- 双语文件: 每个原始段落后面跟着其翻译。这是审阅时更快的文件,因为你可以并排阅读两者,并发现被跳过或误读的段落。在我们的 TextEdit 测试的双语文件中,整个文档先以英文出现一次,然后带着标记再出现一次,这是查看单段落问题的另一种方式。
两个文件均以纯 12 点 Times New Roman 段落格式写入。从右到左的目标语言(如阿拉伯语和希伯来语)会标记为从右到左的段落。在 Word、LibreOffice 或 TextEdit 中打开文件以阅读和格式化它们。
第 4 步:检查翻译后的文件
用源文件和译文运行检查器:
python3 check_rtf.py sample-word-style.rtf sample-word-style-translated.rtf
对于我们这个 Word 风格的文件,比较部分输出如下:
== compare
CHANGED table_cells: 4 -> 0
CHANGED footnotes: 1 -> 0
CHANGED headers: 1 -> 0
CHANGED hyperlinks: 1 -> 0
CHANGED images: 1 -> 0
CHANGED bold_on: 2 -> 0
CHANGED italic_on: 1 -> 0
CHANGED page_breaks: 1 -> 0
CHANGED visible_paragraphs: 7 -> 6
每一行都是需要你复核的任务。这里段落数从七变成六,是因为表格行合并成了一个段落。对于长数字文件,它输出了两行 MISSING,每个被删除的数字各占一行。对于 TextEdit 文件,visible_paragraphs: 8 -> 1 就是需要回到第 2 步的信号。
检查器只统计结构,无法告诉你译文质量好坏。请阅读双语文件,至少读开头几页以及任何包含人名、数字或对话的段落。
常见问题
我翻译后的 RTF 变成了一个长段落。 你的源文件很可能来自 TextEdit 或其他 Mac 应用。对原始文件运行检查器。如果它警告存在反斜杠换行,请将文件转换为 DOCX 或 TXT,然后翻译转换后的文件。
有些单词粘在了一起,比如“StopTime”。 那些原本是表格单元格。RTF 表格在这条路径上会丢失单元格边界。如果表格很重要,请翻译该文件的 DOCX 副本。
句子末尾出现了不属于它的文本。 那很可能是脚注。在原文中找到它,然后把它的译文移回 Word 中的脚注里。
译文中缺少了一个数字。 如果它是 20 个或更多由 0–9 和 a–f 组成的字符,它在翻译前就被移除了。请从原文中复制回来。检查器的 MISSING 行会列出每一个。
格式丢失了。 这在 RTF 路径上是预期行为:文件会用纯段落重建。如果你需要保留格式,请翻译 DOCX 副本,或在翻译后重新应用样式。我们对 DOCX 翻译工具 的对比涵盖了哪些工具能保留 Word 格式以及效果如何。
我能直接得到 DOCX 格式的结果吗? 从 RTF 上传不行;RTF 进,RTF 出。请在上传前将原始文件转换为 DOCX,这样结果就会以 DOCX 返回。





