XML

AI-перевод XML-файлов с помощью Lingo.dev CLI

Что такое XML?

XML (Extensible Markup Language) — это язык разметки, который определяет правила кодирования документов в формате, удобном как для чтения человеком, так и для обработки машиной. Он часто используется для конфигурационных файлов, обмена данными и структурированного контента.

Например:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <title>Привет, мир!</title>

  <description>
    <summary>Простое демонстрационное приложение</summary>
    <details>Пример базового контента</details>
  </description>

  <image src="photo.jpg" alt="Пример фото" title="Нажмите, чтобы посмотреть"/>

  <link href="example.com" label="Нажмите здесь">Узнать больше</link>

  <message>
    <greeting>Привет!</greeting>
    <body>Добро пожаловать в приложение</body>
  </message>
</root>

Что такое Lingo.dev CLI?

Lingo.dev CLI — это бесплатный инструмент с открытым исходным кодом для перевода приложений и контента с помощью ИИ. Он разработан для замены традиционного программного обеспечения для управления переводами и интеграции с существующими конвейерами.

Чтобы узнать больше, см. Обзор.

О данном руководстве

В этом руководстве объясняется, как переводить XML-файлы с помощью Lingo.dev CLI.

Вы узнаете, как:

  • Создать проект с нуля
  • Настроить конвейер перевода
  • Генерировать переводы с помощью ИИ

Предварительные требования

Для использования Lingo.dev CLI убедитесь, что установлена версия Node.js v18+:

❯ node -v
v22.17.0

Шаг 1. Настройка проекта

В каталоге вашего проекта создайте файл i18n.json:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

Этот файл определяет поведение конвейера перевода, включая языки перевода и расположение локализуемого контента в файловой системе.

Чтобы узнать больше о доступных свойствах, см. i18n.json.

Шаг 2. Настройка исходной локали

Исходная локаль — это оригинальный язык и регион, на которых был написан ваш контент. Чтобы настроить исходную локаль, установите свойство locale.source в файле i18n.json:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

Исходная локаль должна быть указана в виде языкового тега BCP 47.

Для полного списка кодов локалей, поддерживаемых Lingo.dev CLI, см. Поддерживаемые коды локалей.

Шаг 3. Настройка целевых локалей

Целевые локали — это языки и регионы, на которые вы хотите перевести ваш контент. Чтобы настроить целевые локали, задайте свойство locale.targets в файле i18n.json:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

Шаг 4. Создание исходного контента

Если вы ещё этого не сделали, создайте один или несколько XML-файлов, содержащих контент для перевода. Эти файлы должны находиться в пути, который включает исходную локаль (например, в названии директории, как en/, или в имени файла, как messages.en.xml).

Шаг 5. Создание корзины

  1. В файле i18n.json добавьте объект "xml" в объект buckets:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "xml": {}
      }
    }
    
  2. В объекте "xml" определите массив с одним или несколькими шаблонами include:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "xml": {
          "include": ["./[locale]/example.xml"]
        }
      }
    }
    

    Эти шаблоны определяют, какие файлы нужно перевести.

    Сами шаблоны:

    • должны содержать [locale] как плейсхолдер для настроенной локали
    • могут указывать на пути к файлам (например, "[locale]/config.xml")
    • могут использовать звёздочки как плейсхолдеры (например, "[locale]/*.xml")

    Рекурсивные шаблоны (например, **/*.xml) не поддерживаются.

Шаг 6. Настройка LLM

CLI Lingo.dev использует большие языковые модели (LLM) для перевода контента с помощью ИИ. Чтобы использовать одну из этих моделей, вам нужен API-ключ от поддерживаемого провайдера.

Чтобы начать как можно быстрее, мы рекомендуем использовать Lingo.dev Engine — нашу собственную платформу, которая предоставляет 10 000 токенов бесплатного ежемесячного использования:

  1. Зарегистрируйтесь в Lingo.dev.

  2. Выполните следующую команду:

    npx lingo.dev@latest login
    

    Эта команда откроет ваш браузер по умолчанию и предложит пройти аутентификацию.

  3. Следуйте инструкциям.

Шаг 7. Генерация переводов

В каталоге, содержащем файл i18n.json, выполните следующую команду:

npx lingo.dev@latest run

Эта команда:

  1. Считывает файл i18n.json.
  2. Находит файлы, которые нужно перевести.
  3. Извлекает переводимый контент из файлов.
  4. Использует настроенную LLM для перевода извлеченного контента.
  5. Записывает переведенный контент обратно в файловую систему.

При первом выполнении генерации переводов создается файл i18n.lock. Этот файл отслеживает, какой контент был переведен, предотвращая ненужные повторные переводы при последующих запусках.

Пример

en/example.xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <title>Hello, world!</title>

  <description>
    <summary>Simple demo app</summary>
    <details>Basic example content</details>
  </description>

  <image src="photo.jpg" alt="Example photo" title="Click to view"/>

  <link href="example.com" label="Click here">Learn more</link>

  <button type="submit" value="Submit" placeholder="Enter text">Submit</button>

  <message>
    <greeting>Hello there!</greeting>
    <body>Welcome to the app</body>
    <signature>Thanks, MyApp Team</signature>
  </message>
</root>

es/example.xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <title>¡Hola, mundo!</title>

  <description>
    <summary>Aplicación de demostración simple</summary>
    <details>Contenido de ejemplo básico</details>
  </description>

  <image src="photo.jpg" alt="Foto de ejemplo" title="Haz clic para ver"/>

  <link href="example.com" label="Haz clic aquí">Aprender más</link>

  <button type="submit" value="Enviar" placeholder="Ingresa texto">Enviar</button>

  <message>
    <greeting>¡Hola!</greeting>
    <body>Bienvenido a la aplicación</body>
    <signature>Gracias, Equipo de MyApp</signature>
  </message>
</root>

i18n.json

{
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {
    "xml": {
      "include": ["./[locale]/example.xml"]
    }
  },
  "$schema": "https://lingo.dev/schema/i18n.json"
}

i18n.lock

version: 1
checksums:
  ec06a6ebae97ffd5f7afc99d9a8f051b:
    root/title: 0468579ef2fbc83c9d520c2f2f1c5059
    root/description/summary: f2c85bf6eeebeea33609e04598201bb6
    root/description/details: 2ee85b8f2f0f1bc008d9cf1f916cb09c
    root/image/%24/src: 3ce26f0a5486adf10e1b7eee1b866a70
    root/image/%24/alt: 94058fbed56fffaef2e9bbea59ba4a54
    root/image/%24/title: 60487c71b570d9dedca6fddd4a75d16a
    root/link/_: e598091d132f890c37a6d4ed94f6d794
    root/link/%24/href: 285d79d2783cf0769ab9e767362c1499
    root/link/%24/label: 26ce69aad587f70d47e7606436bf1d6d
    root/button/_: 7c91ef5f747eea9f77a9c4f23e19fb2e
    root/button/%24/type: fa8748b22d5bac98fdcd57e3d6594cf3
    root/button/%24/value: 7c91ef5f747eea9f77a9c4f23e19fb2e
    root/button/%24/placeholder: 7b5d59cee6952db66043a4b289b51884
    root/section/article/paragraph/sentence: 28ca53c71a2e3e3de79c892a9b193b1a
    root/meta/%24/name: d097029e873a4b19132e2603bd2c9fe4
    root/meta/%24/content: 0811ae3ab84aa87205383c3d8ac42bf3
    root/message/greeting: 85559fc839c5181b7958654e62c987d5
    root/message/body: ed0d4b1cde20d045f9f8c5007c784b0b
    root/message/signature: 181c8c304980949e101865098f548705