Как перевести файл RTF: что сохраняется, а что ломается
Что происходит с абзацами, таблицами, сносками, ссылками и форматированием при переводе файла RTF, почему файлам TextEdit нужен дополнительный шаг и бесплатная программа для проверки.

Чтобы перевести файл RTF, загрузите весь файл .rtf в переводчик, который читает RTF, а затем проверьте результат. BookTranslator принимает RTF. Он читает текст абзац за абзацем, переводит его и выдаёт новый файл RTF и двуязычный файл RTF. Вставить текст в окно чата или веб-переводчик тоже можно для одной-двух страниц, но тогда вы теряете файл и должны собирать его заново.
Перед загрузкой нужно знать одну вещь. Переведённый файл сохраняет ваши слова и абзацы, но не форматирование. Жирный шрифт, заголовки, шрифты, таблицы, ссылки и изображения не возвращаются. Поэтому правильный путь зависит от того, что находится в вашем файле и какое приложение его сохранило. Простая рукопись, сохранённая из Word, — лёгкий случай. Файл, сохранённый TextEdit на Mac, требует сначала одного дополнительного шага, иначе все абзацы слипнутся.
Мы создали три тестовых файла и написали бесплатную программу для проверки, которая показывает, что находится в файле RTF перед загрузкой и что изменилось после. Мы прогнали тестовые файлы через локальную копию кода чтения и записи RTF, который использует BookTranslator, с маркером вместо модели, чтобы вы могли точно увидеть, какой текст каждый тестовый файл отправляет на перевод и как файл возвращается.
Краткий ответ: что происходит с каждой частью файла
| Часть файла | Что вернулось в нашем тесте | Что делать |
|---|---|---|
Абзацы, заканчивающиеся на \par (Word и большинство приложений Windows) | Один переведённый абзац на каждый исходный | Ничего |
| Абзацы, заканчивающиеся обратной косой чертой и разрывом строки (TextEdit, другие приложения Mac) | Весь файл отправлен как один абзац, без пробела на месте каждого разрыва | Сначала преобразуйте файл (см. шаг 2) |
| Жирный шрифт, курсив, заголовки, шрифты, цвета, выравнивание | Удалены. Каждый абзац — 12-й кегль Times New Roman | Отформатируйте заново в Word или переведите DOCX |
| Таблицы | Текст ячеек соединён без пробела: StopTimeNorth pier7:05 | Переведите DOCX |
| Сноски | Текст сноски добавлен в конец её абзаца; номер сноски исчез | Верните сноски вручную или переведите DOCX |
| Колонтитул | Превращается в обычный абзац на том месте, где находится в файле (в нашем тесте — вверху) | Удалите его или оставьте исходный колонтитул |
| Ссылки | Текст ссылки сохраняется и переводится, веб-адрес удаляется | Добавьте ссылки заново |
| Изображения | Удаляются | Сохраните исходный файл для иллюстраций |
Символы с диакритикой и нелатинские символы (café, 日本) | Читаются и записываются корректно | Ничего |
| Любая последовательность из 20 и более символов от 0–9 и a–f (длинные референсные номера, хеши) | Удаляется перед переводом | Проверьте их после перевода (проверяльщик это делает) |
В остальной части руководства показано, откуда берётся каждая строка и что с ней делать.
Шаг 1: Определите, какой у вас RTF
RTF — это текстовый формат с кодами форматирования. Откройте файл в простом текстовом редакторе или выполните head -c 120 yourfile.rtf в терминале и посмотрите на первую строку.
- Если в ней есть
\cocoartf, файл был сохранён текстовой системой Apple: TextEdit или другим Mac-приложением, которое её использует. - Если в ней есть
\rtf1\ansiи нет\cocoartf, скорее всего, файл создан в Word, LibreOffice, WordPad или экспортирован из писательского приложения.
Разница важна, потому что эти два вида завершают абзац по-разному. Word и большинство других текстовых процессоров пишут код \par в конце каждого абзаца. Текстовая система Apple вместо этого пишет один обратный слэш в конце строки. Оба варианта — допустимый RTF: оригинальная спецификация RTF от Microsoft 1989 года (зеркальная копия) гласит, что обратный слэш, за которым следует разрыв строки, обрабатывается так же, как \par, а собственное средство чтения Apple показывает наш тестовый файл TextEdit как отдельные абзацы. Средство чтения RTF в BookTranslator разбивает абзацы только по \par. Мы проверили это в его коде 3 ноября 2026 года и в тесте ниже.
Проверяльщик сообщает, какой у вас вид файла и что ещё в нём есть. Ему нужен только 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, верхний колонтитул, сноска, ссылка, таблица два на два, небольшое изображение, разрыв страницы,café, записанное как символ кодовой страницы, и日本, записанное кодами Unicode. - sample-textedit.rtf был создан на Mac с помощью
textutil -convert rtf, который использует ту же текстовую систему, что и TextEdit. В нём есть заголовок, слова жирным и курсивом, ссылка, маркированный список, таблица и строка с{braces}и обратными косыми чертами. - sample-long-numbers.rtf содержит 20-значный номер заказа, 40-символьный хеш коммита и номер телефона.
Мы скопировали функции чтения и записи RTF из серверного кода BookTranslator 3 ноября 2026 года и запустили их для каждого файла. Модель не использовалась. Каждый абзац, который был бы отправлен на перевод, заменялся на [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.
Номер заказа и хеш коммита исчезли, на месте каждого остался двойной пробел. Программа чтения удаляет любую последовательность из 20 и более символов, состоящую только из цифр 0–9 и букв a–f, потому что именно так в RTF выглядят встроенные данные изображения. Длинное число в вашем тексте выглядит для неё так же. Номер телефона сохранился, потому что его группы цифр короткие.
Это в основном важно для договоров, счетов, технических заметок и записей с длинными справочными номерами. Проверка перечисляет каждую такую строку в исходном файле и сообщает, если какая-то из них отсутствует после перевода.
Шаг 2: Выберите правильный маршрут для вашего файла
Используйте вывод проверки, чтобы выбрать один из них:
| Что в вашем файле | Лучший способ | Почему |
|---|---|---|
Простые абзацы из Word или другого приложения с \par | Загрузите RTF | Абзацы вернутся один к одному; вы потеряете только ненужное вам форматирование |
Простые абзацы из TextEdit (\cocoartf) | Сначала конвертируйте в DOCX или TXT, затем загрузите этот файл | Программа чтения RTF отправила бы весь файл как один абзац |
| Заголовки, таблицы, сноски или форматирование, которое нужно сохранить | Сохраните как DOCX в Word или LibreOffice, затем загрузите DOCX | Путь через RTF воссоздаёт простой файл; DOCX проходит через рабочий процесс Word |
| Длинные справочные номера или хеши | Любой способ, затем проверьте | Убедитесь, что каждое число вернулось |
Чтобы конвертировать файл TextEdit на Mac, откройте Терминал и выполните одну из этих команд:
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 переводит абзацы по порядку. Для длинного файла с повторяющимися именами и терминами включите опцию Auto glossary перед оплатой, чтобы они переводились одинаково по всему тексту.
Вы получите два файла:
- Переведённый файл: каждый абзац на целевом языке.
- Двуязычный файл: каждый исходный абзац, за которым следует его перевод. Это более быстрый файл для проверки, потому что вы можете читать их рядом и замечать абзац, который был пропущен или неверно прочитан. В двуязычном файле для нашего теста TextEdit весь документ появляется один раз на английском, а затем один раз с маркером, что является ещё одним способом увидеть проблему одного абзаца.
Оба файла записаны как простые абзацы шрифтом Times New Roman 12 пунктов. Целевые языки с письмом справа налево, такие как арабский и иврит, помечены как абзацы справа налево. Откройте файлы в 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.
Похожие статьи





