---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.4
alternate:
  - https://3y3.dev/en/tools/docs/translate-xliff.md
  - https://3y3.dev/ru/tools/docs/translate-xliff.md
  - href: https://3y3.dev/ru/tools/docs/translate-xliff.md
    type: text/markdown
    title: Markdown version
  - href: https://3y3.dev/ru/llms.txt
    rel: describedby
keywords:
  - translate
  - xliff
  - cat
  - extract
  - compose
  - trados
  - smartcat
  - crowdin
  - перевод
updatedAt: '2026-09-01T09:43:34.000Z'
tags:
  - локализация
---
> **Documentation Index:** Fetch the complete configuration index at https://3y3.dev/ru/llms.txt

# Обмен XLIFF с CAT-системами

Когда перевод выполняют люди - штатные переводчики или бюро переводов, - они обычно работают в системе автоматизированного перевода (Computer Assisted Translation, или CAT): Trados, Phrase, Smartcat, Crowdin и подобных. Стандартный формат обмена с такими системами - [XLIFF](https://en.wikipedia.org/wiki/XLIFF).

Подкоманды `extract` и `compose` команды `yfm translate` реализуют полный цикл такого перевода:

1. `extract` выгружает переводимый текст проекта в `*.xliff` файлы.
2. Файлы переводятся в CAT-системе.
3. `compose` собирает переведенные `*.xliff` обратно в файлы документации.

## Как это работает {#how-it-works}

`extract` разбивает каждый файл документации на две части:

* `<файл>.xliff` - переводимые сегменты: предложения, заголовки, ячейки таблиц;
* `<файл>.skl` - скелет: исходный файл, в котором на месте сегментов стоят маркеры.

Разметка, код и Liquid-конструкции остаются в скелете и в CAT-систему не попадают - подробнее в разделе [Как устроен перевод](https://3y3.dev/ru/tools/docs/translate.md#pipeline).

Оба файла сохраняются по пути целевого языка. Например, при переводе с `ru` на `en` из файла `ru/guide/index.md` получатся `en/guide/index.md.xliff` и `en/guide/index.md.skl`.

`compose` выполняет обратную операцию: находит в директории пары `.xliff` + `.skl` и собирает из каждой переведенный файл - `en/guide/index.md`. Файлы без пары пропускаются с предупреждением.

## Пример полного цикла {#example}

```bash
# Выгрузить сегменты: в ./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 {#format}

`extract` создает XLIFF версии 1.2. Каждый сегмент - элемент `<trans-unit>` с исходным текстом в `<source>`. Перевод должен попасть в элемент `<target>` - CAT-системы добавляют его сами:

```xml
<?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 {#extract}

#|
|| **Параметр** | **Описание** ||
|| `--source`, `-sl` |
Язык оригинала в формате ISO 639-1: `ru` или `ru-RU`. Обязательный
||
|| `--target`, `-tl` |
Язык перевода: `en` или `en-US`. Можно указать несколько раз - выгрузка выполнится для каждого языка
||
|| `--filter` |
Выгружать только файлы, достижимые из `toc.yaml`. По умолчанию выгружаются все файлы проекта
||
|| `--schema` |
Пути к файлам с собственными [схемами перевода](https://3y3.dev/ru/tools/docs/translate.md#json-schemas) для YAML и JSON. Можно указать несколько
||
|| `--no-ref-resolve` |
Не разворачивать `$ref` в OpenAPI-спецификациях при выгрузке
||
|#

Также поддерживаются общие параметры `--input`, `--output`, `--files`, `--include` и `--exclude` - см. [Локализация](https://3y3.dev/ru/tools/docs/translate.md#options).

## Параметры compose {#compose}

#|
|| **Параметр** | **Описание** ||
|| `--input`, `-i` |
Директория с парами `*.xliff` + `*.skl`. По умолчанию - директория запуска команды
||
|| `--output`, `-o` |
Путь до **корня** проекта, в который нужно сохранить собранные файлы. По умолчанию совпадает с `input`
||
|| `--use-source` |
Собрать файлы из исходного текста (`<source>`) вместо перевода. Полезно для отладки выгрузки
||
|#

Параметры `--include` и `--exclude` фильтруют пары файлов так же, как при переводе - см. [Локализация](https://3y3.dev/ru/tools/docs/translate.md#options).
