Обмен XLIFF с CAT-системами
Когда перевод выполняют люди - штатные переводчики или бюро переводов, - они обычно работают в системе автоматизированного перевода (Computer Assisted Translation, или CAT): Trados, Phrase, Smartcat, Crowdin и подобных. Стандартный формат обмена с такими системами - XLIFF.
Подкоманды extract и compose команды yfm translate реализуют полный цикл такого перевода:
extractвыгружает переводимый текст проекта в*.xliffфайлы.- Файлы переводятся в CAT-системе.
composeсобирает переведенные*.xliffобратно в файлы документации.
Как это работает
extract разбивает каждый файл документации на две части:
<файл>.xliff- переводимые сегменты: предложения, заголовки, ячейки таблиц;<файл>.skl- скелет: исходный файл, в котором на месте сегментов стоят маркеры.
Разметка, код и Liquid-конструкции остаются в скелете и в CAT-систему не попадают - подробнее в разделе Как устроен перевод.
Оба файла сохраняются по пути целевого языка. Например, при переводе с ru на en из файла ru/guide/index.md получатся en/guide/index.md.xliff и en/guide/index.md.skl.
compose выполняет обратную операцию: находит в директории пары .xliff + .skl и собирает из каждой переведенный файл - en/guide/index.md. Файлы без пары пропускаются с предупреждением.
Пример полного цикла
# Выгрузить сегменты: в ./xliff появятся en/**/*.xliff и en/**/*.skl
yfm translate extract -i ./docs -o ./xliff --source ru --target en
# ...перевести *.xliff в CAT-системе...
# Собрать переведенные файлы в ./docs/en
yfm translate compose -i ./xliff -o ./docs
В CAT-систему передаются только *.xliff файлы, но при сборке переведенные *.xliff должны лежать рядом со своими *.skl - не удаляйте скелеты между шагами.
После compose переведенная версия собирается обычным yfm build.
Формат XLIFF
extract создает XLIFF версии 1.2. Каждый сегмент - элемент <trans-unit> с исходным текстом в <source>. Перевод должен попасть в элемент <target> - CAT-системы добавляют его сами:
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file original="file.ext" source-language="ru-RU" target-language="en-US" datatype="markdown">
<header>
<skeleton>
<external-file href="file.skl"></external-file>
</skeleton>
</header>
<body>
<trans-unit id="1">
<source xml:space="preserve" xml:lang="ru-RU">Заголовок документа</source>
</trans-unit>
</body>
</file>
</xliff>
Инлайн-разметка внутри сегмента - выделение, ссылки, код - кодируется служебными тегами <g> и <x/>. При переводе их нужно сохранять: по ним compose восстанавливает исходную разметку.
Параметры extract
|
Параметр |
Описание |
|
|
Язык оригинала в формате ISO 639-1: |
|
|
Язык перевода: |
|
|
Выгружать только файлы, достижимые из |
|
|
Пути к файлам с собственными схемами перевода для YAML и JSON. Можно указать несколько |
|
|
Не разворачивать |
Также поддерживаются общие параметры --input, --output, --files, --include и --exclude - см. Локализация.
Параметры compose
|
Параметр |
Описание |
|
|
Директория с парами |
|
|
Путь до корня проекта, в который нужно сохранить собранные файлы. По умолчанию совпадает с |
|
|
Собрать файлы из исходного текста ( |
Параметры --include и --exclude фильтруют пары файлов так же, как при переводе - см. Локализация.