Субтитры WebVTT
AI-перевод файлов субтитров WebVTT с помощью Lingo.dev CLI
Что такое субтитры WebVTT?
Субтитры WebVTT (Web Video Text Tracks) — это формат для отображения синхронизированного текста с видео в HTML5. Они поддерживают стилизацию, позиционирование и метаданные, что делает их более функциональными по сравнению с SRT.
Например:
WEBVTT
NOTE
Product demonstration video with captions
1
00:00:01.000 --> 00:00:03.500
Welcome to our software tutorial
subtitle-2
00:00:04.000 --> 00:00:07.200
Let's explore the main features
3
00:00:08.500 --> 00:00:12.000 align:middle line:90%
Here's how to create your first project
Что такое Lingo.dev CLI?
Lingo.dev CLI — это бесплатный open-source CLI для перевода приложений и контента с помощью AI. Он создан, чтобы заменить традиционные системы управления переводами и легко интегрируется в существующие пайплайны.
Подробнее см. в разделе Обзор.
О данном руководстве
В этом гайде рассказывается, как переводить файлы субтитров WebVTT с помощью Lingo.dev CLI.
Вы узнаете, как:
- Создать проект с нуля
- Настроить пайплайн перевода
- Генерировать переводы с помощью AI
Необходимые условия
Для работы с 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. Создайте исходный контент
Если вы ещё не сделали этого, создайте один или несколько файлов субтитров WebVTT, которые содержат переводимый контент. Эти файлы должны находиться по пути, который включает исходную локаль (например, в виде имени каталога как en/ или как часть имени файла, например messages.en.vtt).
Шаг 5. Создайте bucket
-
В файле
i18n.jsonдобавьте объект"vtt"в объектbuckets:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "vtt": {} } } -
В объекте
"vtt"определите массив из одного или нескольких шаблоновinclude:{ "$schema": "https://lingo.dev/schema/i18n.json", "version": "1.10", "locale": { "source": "en", "targets": ["es"] }, "buckets": { "vtt": { "include": ["./[locale]/example.vtt"] } } }Эти шаблоны определяют, какие файлы переводить.
Сами шаблоны:
- должны содержать
[locale]как плейсхолдер для выбранной локали - могут указывать на пути к файлам (например,
"[locale]/video.vtt") - могут использовать звёздочки как подстановочные знаки (например,
"[locale]/*.vtt")
Рекурсивные glob-шаблоны (например,
**/*.vtt) не поддерживаются. - должны содержать
Шаг 6. Настройте LLM
Lingo.dev CLI использует большие языковые модели (LLM) для перевода контента с помощью ИИ. Чтобы использовать одну из этих моделей, вам нужен API-ключ от поддерживаемого провайдера.
Чтобы начать как можно быстрее, рекомендуем использовать Lingo.dev Engine — нашу собственную облачную платформу, которая предоставляет 10 000 бесплатных токенов в месяц:
-
Выполните следующую команду:
npx lingo.dev@latest loginОткроется ваш браузер по умолчанию и появится запрос на аутентификацию.
-
Следуйте инструкциям на экране.
Шаг 7. Генерация переводов
В каталоге, где находится файл i18n.json, выполните следующую команду:
npx lingo.dev@latest run
Эта команда:
- Считывает файл
i18n.json. - Находит файлы, которые нужно перевести.
- Извлекает переводимый контент из файлов.
- Использует настроенную LLM для перевода извлечённого контента.
- Записывает переведённый контент обратно в файловую систему.
При первой генерации переводов создаётся файл i18n.lock. Этот файл отслеживает, какой контент уже переведён, чтобы избежать лишних повторных переводов при следующих запусках.
Пример
en/example.vtt
WEBVTT
NOTE
Product demonstration video with captions
1
00:00:01.000 --> 00:00:03.500
Welcome to our software tutorial
subtitle-2
00:00:04.000 --> 00:00:07.200
Let's explore the main features
3
00:00:08.500 --> 00:00:12.000 align:middle line:90%
Here's how to create your first project
00:00:13.000 --> 00:00:16.500
Click the New Project button
to get started
final-cue
00:00:17.000 --> 00:00:20.000 position:25% align:start
That completes our basic tutorial
es/example.vtt
WEBVTT
NOTE
Video de demostración de producto con subtítulos
1
00:00:01.000 --> 00:00:03.500
Bienvenido a nuestro tutorial de software
subtitle-2
00:00:04.000 --> 00:00:07.200
Exploremos las características principales
3
00:00:08.500 --> 00:00:12.000 align:middle line:90%
Aquí está cómo crear tu primer proyecto
00:00:13.000 --> 00:00:16.500
Haz clic en el botón Nuevo Proyecto
para comenzar
final-cue
00:00:17.000 --> 00:00:20.000 position:25% align:start
Eso completa nuestro tutorial básico
i18n.json
{
"version": "1.10",
"locale": {
"source": "en",
"targets": ["es"]
},
"buckets": {
"vtt": {
"include": ["./[locale]/example.vtt"]
}
},
"$schema": "https://lingo.dev/schema/i18n.json"
}
i18n.lock
version: 1
checksums:
ab6437a18c50af6612bb75499361d64a:
0#1-3.5#1: 5df3c06b74cfc8558e85ff75a30a9162
1#4-7.2#subtitle-2: 0de65f1d2616b6959aa79ac5beb6e84c
2#8.5-12#3: 3351244c032529a099f1191477d9e488
3#13-16.5#: b9341abc965d5178a96d9bc4e8e2c59a
4#17-20#final-cue: 0b67e089cd3f39b8520d7a2be9f34362