Что такое XLIFF?
XLIFF (XML Localization Interchange File Format) — это открытый стандарт на основе XML, разработанный для хранения локализуемых данных и их переноса между различными этапами процесса локализации. Стандартизированный OASIS, XLIFF обеспечивает обмен переводимым контентом между различными инструментами независимо от исходного формата файла.
В отличие от TMX, который хранит завершённые переводы, XLIFF разработан как рабочий формат для активного процесса перевода, содержащий исходный контент, переводы и метаданные рабочего процесса.
Версии XLIFF
XLIFF 1.2 (2008)
Наиболее широко принятая версия:
- Зрелая и стабильная спецификация
- Широкая поддержка инструментами
- Обширная поддержка встроенных элементов
- До сих пор основной рабочий формат индустрии
XLIFF 2.0 (2014) / 2.1 (2018)
Современная переработка с модульной архитектурой:
- Более чистое, простое ядро
- Модульные расширения
- Лучше определённая семантика
- Растущее принятие
Структура XLIFF
Базовая структура XLIFF 1.2
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" target-language="ru"
datatype="plaintext" original="example.txt">
<body>
<trans-unit id="1">
<source>Hello, world!</source>
<target>Привет, мир!</target>
</trans-unit>
</body>
</file>
</xliff>
Базовая структура XLIFF 2.x
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0"
version="2.0" srcLang="en" trgLang="ru">
<file id="f1" original="example.txt">
<unit id="1">
<segment>
<source>Hello, world!</source>
<target>Привет, мир!</target>
</segment>
</unit>
</file>
</xliff>
Ключевые элементы (XLIFF 1.2)
| Элемент | Описание |
|---|---|
<xliff> | Корневой элемент с версией |
<file> | Контейнер для одного файла |
<body> | Содержит единицы перевода |
<trans-unit> | Один переводимый сегмент |
<source> | Оригинальный текст |
<target> | Переведённый текст |
<note> | Комментарии для переводчиков |
<alt-trans> | Альтернативные переводы |
Ключевые элементы (XLIFF 2.x)
| Элемент | Описание |
|---|---|
<xliff> | Корневой с srcLang, trgLang |
<file> | Контейнер для содержимого файла |
<unit> | Переводимая единица |
<segment> | Пара исходник-перевод |
<source> | Оригинальный контент |
<target> | Перевод |
<notes> | Контейнер для заметок |
<note> | Отдельный комментарий |
Атрибуты элемента File
XLIFF 1.2
<file
source-language="en-US"
target-language="ru-RU"
datatype="html"
original="index.html"
product-name="MyApp"
product-version="2.0"
build-num="1234">
XLIFF 2.x
<file
id="f1"
original="index.html">
Коды языков перемещены в корневой элемент <xliff> в версии 2.x.
Статусы Trans-Unit / Unit
Статусы перевода (XLIFF 1.2)
| Статус | Значение |
|---|---|
new | Ещё не переведено |
needs-translation | Требует перевода |
needs-review-translation | Перевод требует проверки |
translated | Перевод завершён |
final | Утверждён и окончателен |
signed-off | Официально подписан |
Пример со статусом
<trans-unit id="1" state="needs-review-translation">
<source>Welcome</source>
<target state="needs-review-translation">Добро пожаловать</target>
</trans-unit>
Встроенные элементы
XLIFF поддерживает богатую встроенную разметку:
Встроенные теги XLIFF 1.2
| Тег | Описание | Пример |
|---|---|---|
<g> | Общая группа | <g id="1">жирный</g> |
<x> | Общий плейсхолдер | <x id="1"/> |
<bx> | Начало парного тега | <bx id="1"/> |
<ex> | Конец парного тега | <ex id="1"/> |
<bpt> | Начало парного тега (с содержимым) | <bpt id="1"><b></bpt> |
<ept> | Конец парного тега (с содержимым) | <ept id="1"></b></ept> |
<ph> | Плейсхолдер | <ph id="1">{0}</ph> |
<it> | Изолированный тег | <it id="1"><br/></it> |
Пример со встроенными тегами
<trans-unit id="msg1">
<source>Click <g id="1">here</g> to continue.</source>
<target>Нажмите <g id="1">здесь</g>, чтобы продолжить.</target>
</trans-unit>
Метаданные и заметки
Добавление заметок
<trans-unit id="1">
<source>File</source>
<target>Файл</target>
<note from="developer">Метка пункта меню</note>
<note from="translator">Контекст: главное меню</note>
</trans-unit>
Группы контекста
<trans-unit id="1">
<source>OK</source>
<context-group name="location">
<context context-type="sourcefile">dialog.cpp</context>
<context context-type="linenumber">42</context>
</context-group>
</trans-unit>
Модули XLIFF 2.x
XLIFF 2.0+ использует модульные расширения:
| Модуль | Назначение |
|---|---|
| Translation Candidates | Альтернативные переводы |
| Glossary | Определения терминов |
| Format Style | Информация о форматировании |
| Metadata | Пользовательские метаданные |
| Resource Data | Внешние ресурсы |
| Change Tracking | История изменений |
| Size Restriction | Ограничения длины |
| Validation | Правила QA |
XLIFF vs TMX
| Аспект | XLIFF | TMX |
|---|---|---|
| Назначение | Рабочий процесс локализации | Хранение/обмен TM |
| Содержимое | Документы в процессе перевода | Завершённые переводы |
| Метаданные | Ориентированы на процесс | Ориентированы на TM |
| Структура | Иерархическая (файлы, единицы) | Плоская (только TU) |
| Статусы | Отслеживает прогресс перевода | Нет отслеживания статусов |
| Использование | Активные проекты | Архив/справочник |
Лучшие практики
Создание файлов XLIFF
Выбирайте правильную версию
- XLIFF 1.2 для максимальной совместимости
- XLIFF 2.x для современных рабочих процессов
Сохраняйте контекст
- Включайте информацию о пути к файлу
- Добавляйте значимые заметки
- Используйте группы контекста
Правильно сегментируйте
- Одна переводимая единица на сегмент
- Сохраняйте встроенное форматирование
- Включайте ID для отслеживания
Обработка XLIFF
Валидируйте структуру
- Проверяйте корректность XML
- Валидируйте по схеме
Обрабатывайте статусы
- Отслеживайте прогресс перевода
- Обновляйте статусы соответственно
Сохраняйте встроенные элементы
- Поддерживайте порядок тегов
- Правильно сопоставляйте ID тегов
FAQ
В чём разница между XLIFF и TMX?
XLIFF предназначен для активного рабочего процесса локализации — он переносит документы в процессе перевода со всеми их метаданными и контекстом. TMX — для хранения и обмена завершёнными переводами (памятью переводов). Вы работаете в XLIFF, храните в TMX.
Какую версию XLIFF использовать?
XLIFF 1.2 обеспечивает максимальную совместимость с инструментами. XLIFF 2.x чище и современнее, но имеет меньшую распространённость поддержки. Проверьте свою цепочку инструментов перед выбором.
Может ли XLIFF хранить память переводов?
XLIFF не предназначен для хранения TM, но XLIFF 2.x имеет модуль Translation Candidates, который может хранить альтернативные переводы. Для TM используйте TMX.
Как конвертировать файлы в XLIFF?
Большинство CAT-систем могут извлекать контент из различных форматов (DOCX, HTML и т.д.) в XLIFF. Специализированные инструменты вроде Okapi Framework предоставляют фильтры для многих типов файлов.
Обязателен ли XLIFF для локализации?
Нет, но он очень полезен. XLIFF предоставляет стандартный способ обмена проектами локализации между различными инструментами и командами, улучшая совместимость.
Может ли XLIFF обрабатывать сложное форматирование?
Да, XLIFF имеет обширную поддержку встроенных элементов для работы с форматированием, плейсхолдерами и разметкой. Правильная обработка встроенных элементов — ключ к сохранению структуры документа.
