Перевод сайта на Next.js с помощью Gemini без риска для продакшена
Как переводить MDX-контент с помощью Gemini Batch API за половину стоимости токенов, проверять каждый ответ до сохранения и платить только за реальные изменения.
View as MarkdownМашинный перевод стал настолько доступным, что локализация всего сайта на десять языков обойдется дешевле чашки кофе. Сложность никогда не заключалась в самой модели. Куда больше проблем доставляет все остальное. Нужно точно знать, что именно требует перевода. Нужно отлавливать ошибки модели до того, как они попадут в продакшен. И уж точно не хочется платить за повторный перевод пятисот страниц только из-за одной исправленной опечатки.
В этой статье мы подробно разберем, как Scribe решает каждую из этих задач. В качестве примера мы будем использовать этот самый сайт (десять языков и полный перевод каждой страницы).
Переводите только то, что изменилось
Каждый переводимый документ получает хеш своего контента. Этот хеш включает отмеченные поля frontmatter и само тело MDX. Каждая сохраненная версия перевода помнит хеш, на основе которого она была создана. Список задач для запуска перевода формируется очень просто. Это все пары (документ, локаль), где хеши не совпадают или перевод вовсе отсутствует.
Такой подход дает два важных преимущества:
- Исправление опечатки в одном файле помечает как устаревший ровно один документ во всех локалях.
- Если запустить
scribe translateдважды подряд, второй запуск просто ничего не сделает.
Прежде чем тратить деньги, можно выполнить команду scribe translate --dry-run. Она выведет список задач с оценкой количества токенов и стоимости каждого элемента. Например, перед публикацией нескольких релизов за один день в нашем чейнджлоге мы увидели 18 ожидающих задач с расчетной стоимостью всего 0,07 доллара.
За полцены благодаря Batch API
По умолчанию перевод работает через Gemini Batch API. Там входящие и исходящие токены стоят на 50% дешевле стандартного интерактивного тарифа. Все запросы планируются и отправляются заранее, а затем их статус проверяется пакетом. Задания сохраняются в базе SQLite в момент отправки. Поэтому вы можете прервать процесс ожидания, а позже снова запустить scribe translate и продолжить работу с того же места.
Промпты структурированы особым образом. Английский текст образует идентичный префикс для всех целевых языков. Если одна страница переводится на девять языков, неявное кеширование контекста в Gemini дает скидку на повторяющиеся входящие токены. Инструкция для конкретной локали находится в самом конце промпта и не нарушает общий префикс.
Проверяйте до сохранения, а не после релиза
Периодически нейросеть может возвращать сломанный результат (невалидный MDX, выдуманное поле или оборванную строку). Главное правило, которое спасает ситуацию, звучит так: ничего не попадает в хранилище без валидации.
Каждый ответ парсится как MDX и заново проверяется по Zod-схеме документа. Ошибка в ответе приводит к сбою только одного элемента, а не всего сайта. В конце прогона неудачные элементы отправляются на повторную попытку. Ошибки валидации передаются модели в качестве обратной связи, и это решает большинство проблем. Если элемент выдает ошибку дважды, система сообщает об этом и оставляет текст без перевода. В это время сборка просто продолжает показывать английскую версию для этой локали.
Перевод или транскреация
Буквальный перевод читается как техническая инструкция. Встроенный промпт Scribe ставит задачу иначе. Модель выступает в роли носителя языка и пишет адаптированную версию текста. Она передает суть каждого предложения, а не копирует исходный синтаксис. Нейросеть воссоздает игру слов и идиомы, не переводя их дословно, и применяет местные правила типографики.
Вы можете задать дополнительные настройки через translate.context (о чем ваш сайт, какие брендовые термины оставить на английском) и translate.rules (ограничения корпоративного стиля) в конфигурационном файле. Полный список опций можно найти в руководстве по переводу.
Сколько это стоит на практике
На этом сайте есть лендинг, раздел документации, чейнджлог, а теперь еще и блог, переведенные на девять иностранных языков. Полный повторный перевод с нуля обойдется в пару долларов. Инкрементальные запуски после обычного редактирования стоят сущие копейки. В многоязычных сайтах всегда было дорого платить не за токены, а за координацию процесса. Использование хешей для проверки актуальности полностью избавляет от необходимости этой координации.
Начните с руководства по быстрому старту, а затем запустите свой первый перевод, открыв справочник по CLI.