书译
书译

如何翻译 RTF 文件:哪些内容能保留,哪些会丢失

翻译 RTF 文件时,段落、表格、脚注、链接和格式会发生什么变化,为什么 TextEdit 文件需要额外一步,以及一个免费检查工具。

BookTranslator

BookTranslator Team

20 分钟阅读

要翻译 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 代码到文本再返回的旅程中幸存下来。三个意外是:

  1. 页眉变成了第一个段落。 “Harbor Notes - Draft 2” 原本是打印在每页顶部的页眉。在翻译后的文件中,它变成了正文。
  2. 脚注移入了句子。 “Timetable from the 1998 edition.” 原本是 “opened” 的脚注。现在它跟在句子后面,仿佛是其一部分,脚注编号消失了。翻译该段落的模型看到的是一个连续文本,你必须手动找到并移回脚注。
  3. 表格单元格连在一起了。 四个单元格 “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 返回。

相关文章

如何翻译 RTF 文件:哪些内容能保留,哪些会丢失