Повторный перевод

Max PrilutskiyГенеральный директор и соучредительUpdated 16 дней назад · 2 min read

lingo push переводит только то, что изменилось: сверяет каждый источник с локфайлом и пропускает совпадения. Это разумное поведение по умолчанию — но иногда нужно переперевести контент с тем же исходным текстом: например, после смены модели движка, обновления правил или глоссария, или чтобы исправить проблему с качеством.

Есть три способа, и каждый стоит по-разному: --key для отдельных строк, ограниченный по области --force push для целых файлов или purge с последующим обычным push для всей локали. Выбирайте самый узкий вариант, который покрывает нужное.

Повторный перевод отдельных ключей#

--key переводит заново только нужные ключи, объединяет их с существующим переводом и не трогает всё остальное. Различия в источнике игнорируются — строка будет переведена заново, даже если в английском оригинале ничего не менялось.

bash
lingo push --key auth.login

Чтобы указать несколько ключей, повторите флаг:

bash
lingo push --key auth.login --key billing.plan

Шаблон охватывает ключ точно, как префикс с границей ., /, - или [, либо как glob. Например, auth.login захватывает и auth.login.title, но не auth.login_url; обычный auth охватывает всё поддерево auth, но не authority. Заключайте glob-шаблоны в кавычки — иначе оболочка раскроет их раньше, чем CLI их увидит:

bash
lingo push --key "auth.*"

Это самый экономичный вариант — вы платите только за те ключи, которые указали, и ни за что сверху. Для работы нужен уже существующий перевод: если локаль ещё ни разу не переводилась, она будет пропущена с сообщением, которое отправит вас к --backfill-missing. Некоторые форматы вообще не поддерживают выбор ключей — в Форматах объясняется, какие именно и почему.

Полное описание поведения, в том числе что происходит с неуказанными ключами, см. в lingo push.

Принудительный выборочный push#

--force переводит заново все подходящие цели, игнорируя существующие переводы и серверный кэш. Ограничивайте область — если только вы не хотите затронуть весь проект: голый lingo push --force покрывает все настроенные шаблоны, и единственное, что останавливает, — запрос подтверждения.

Один файл#

bash
lingo push content/en/landing.mdx --force

Поддерево#

bash
lingo push 'content/en/**/*.md' --force

Всё#

bash
lingo push --backfill-missing --force --yes

--force запрашивает подтверждение перед перезаписью. Передайте --yes, чтобы пропустить запрос (CI). Полный список флагов см. в lingo push.

Повторный перевод одной локали#

У push нет флага для отдельной локали. Чтобы заново перевести только один язык, удалите его файлы и выполните backfill:

bash
lingo purge --locale fr
lingo push --backfill-missing

purge удаляет цели fr, а --backfill-missing затем восстанавливает только недостающее — остальные локали остаются нетронутыми. Это также дешевле, чем --force, потому что всё, кроме fr, по-прежнему берётся из кэша. См. Purge.

Оцените затраты до запуска#

Любой push принимает --estimate: он оценивает стоимость запуска и завершает работу без перевода:

bash
lingo push 'content/en/**/*.md' --force --estimate

Команда также работает вместе с --key — можно оценить стоимость ключевой области до запуска:

bash
lingo push --key auth.login --estimate

Оценка приблизительная, а не точный расчёт — итоговая стоимость может отличаться.

Когда нужен повторный перевод#

СитуацияЧто запускать
Исходный текст изменилсяНичего — обычный lingo push сам всё подхватит
Несколько строк, которые вас не устраиваютlingo push --key auth.login --key billing.plan
Сменили модель движкаlingo push <scope> --force
Обновлённые правила / глоссарийlingo push --key <affected keys> или lingo push <scope> --force
Низкое качество в одной локалиlingo purge --locale <code>, затем lingo push --backfill-missing
Начинаете с чистого листаlingo push --backfill-missing --force --yes