Lingo.dev + XLIFF

Lingo.dev CLI переводит файлы XLIFF (XML Localization Interchange File Format), сохраняя структуру документа, единицы перевода и состояния рабочего процесса. CLI поддерживает форматы XLIFF 1.2 и 2.0, сохраняет метаданные исходного языка, иерархию файлов/групп/единиц, обрабатывает секции CDATA для XML-чувствительного контента и интегрируется с профессиональными переводческими процессами и CAT-инструментами.

Быстрая настройка

Настройка для файлов XLIFF:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de", "ja"]
  },
  "buckets": {
    "xliff": {
      "include": ["localization/[locale].xliff"]
    }
  }
}

Напоминание: [locale] — это плейсхолдер, который должен оставаться в конфигурации буквально, так как он заменяется на фактический язык во время выполнения CLI.

Перевод файлов XLIFF

npx lingo.dev@latest i18n

Сохраняет структуру XLIFF, состояния перевода и метаданные профессионального рабочего процесса перевода при переводе контента.

Структура файла XLIFF

Формат XLIFF 1.2

<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
  <file original="app.strings" source-language="en" target-language="es" datatype="plaintext">
    <header></header>
    <body>
      <trans-unit id="welcome" resname="welcome.message">
        <source>Welcome to our application</source>
        <target state="translated">Bienvenido a nuestra aplicación</target>
      </trans-unit>
      <trans-unit id="login" resname="auth.login">
        <source>Log In</source>
        <target state="new"></target>
      </trans-unit>
    </body>
  </file>
</xliff>

Формат XLIFF 2.0

<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en">
  <file id="messages">
    <unit id="welcome">
      <segment>
        <source>Welcome to our application</source>
      </segment>
    </unit>
    <group id="auth">
      <unit id="login">
        <segment>
          <source>Log In</source>
        </segment>
      </unit>
    </group>
  </file>
</xliff>

Генерация ключей

Ключи XLIFF генерируются детерминированно с использованием URL-кодирования:

Ключи XLIFF 1.2

  • Основаны на атрибуте resname, затем id, затем исходном тексте
  • Простой формат: welcome.message, auth.login

Ключи XLIFF 2.0

  • Иерархическая структура пути: resources/{fileId}/{groupPath}{unitId}/source
  • URL-кодированные пути: resources%2Fmessages%2Fauth%2FgroupUnits%2Flogin%2Fsource
  • Группы создают вложенные пути с разделителем groupUnits

Особенности XLIFF

Состояния перевода

<!-- Состояния target в XLIFF 1.2 -->
<target state="new">Непереведённый контент</target>
<target state="translated">Переведённый контент</target>
<target state="reviewed">Проверенный перевод</target>
<target state="final">Окончательно утверждённый перевод</target>

Состояния перевода сохраняются и обновляются в процессе обработки.

Метаданные исходного языка

<!-- XLIFF 1.2 -->
<file source-language="en-US" target-language="es-ES">

<!-- XLIFF 2.0 -->
<xliff srcLang="en-US" trgLang="es-ES">

Информация об исходном языке автоматически сохраняется и обновляется.

Секции CDATA

<source><![CDATA[Контент с <tags> и "специальными" символами]]></source>

Секции CDATA используются автоматически для контента, содержащего символы, чувствительные к XML.

Организация групп

<!-- Группы XLIFF 2.0 для логической организации -->
<group id="navigation">
  <unit id="home"><segment><source>Home</source></segment></unit>
  <unit id="settings"><segment><source>Settings</source></segment></unit>
</group>

Иерархические структуры групп сохраняются и отражаются в путях ключей.

Расширенная конфигурация

Несколько файлов XLIFF

"xliff": {
  "include": [
    "localization/app_[locale].xliff",
    "localization/ui_[locale].xliff"
  ]
}

Расширения файлов

"xliff": {
  "include": [
    "translations/[locale].xliff",
    "translations/[locale].xlf"
  ]
}

Поддерживаются как расширения .xliff, так и .xlf.

Блокировка единиц перевода

"xliff": {
  "include": ["localization/[locale].xliff"],
  "lockedKeys": ["app.version", "build.number"]
}

Профессиональный рабочий процесс перевода

Файлы XLIFF легко интегрируются с:

  • CAT (инструментами автоматизированного перевода)
  • Системами управления переводами (TMS)
  • Рабочими процессами профессиональных переводчиков
  • Процессами обеспечения качества
  • Системами памяти переводов

CLI сохраняет все метаданные рабочего процесса, обеспечивая при этом перевод с поддержкой ИИ для быстрой локализации.