gtx-cli@2.3.0
Обзор
В gtx-cli 2.3.0 мы изменили поведение команд translate и upload и улучшили видимость конвейера перевода.
Translate
Ранее translate и запускал переводы, и в фоновом режиме выполнял разовую инициализацию проекта (генерируя контекст и глоссарий, которые вы видите в своей панели управления).
На небольших проектах это происходило быстро; на крупных кодовых базах подготовка могла занимать достаточно времени, чтобы сработал таймаут, создавая впечатление, будто произошёл сбой перевода.
Хотя пользователям казалось, что translate завершился с ошибкой, инициализация асинхронно продолжалась, а переводы генерировались, но не загружались, что приводило к неполному и запутанному UX.
Настройка
Теперь настройка — это отдельный шаг. Мы оптимизировали её, чтобы таймауты возникали крайне редко.
Но, понимая, что настройка всё ещё может завершиться с ошибкой, мы сделали так, что перевод больше не «зависит» от её завершения. Теперь конвейер выглядит примерно так:
- Upload: отправьте файлы и дождитесь подтверждения успешной загрузки.
- Setup (only if needed): запустите задачу настройки и дождитесь результата; если она завершается с ошибкой или по таймауту, мы переходим дальше.
- Translate: создайте задачи перевода на основе уже загруженных файлов.
Если настройка завершается вовремя — отлично. Если она завершается с ошибкой или по таймауту, мы продолжаем и сообщаем вам, что произошло. Вы всё равно получаете переводы.
Что вы увидите при запуске npx gtx-cli translate:
Запуск перевода...
Файлы для перевода:
- your/file/path.mdx
- ...
Загрузка файлов в General Translation API...
✔ Файлы успешно загружены
Настройка проекта...
# Если настройка выполнена успешно
Настройка успешно завершена.
# Если истекло время ожидания настройки
⚠ Истекло время ожидания настройки — продолжение без настройки: Превышено время ожидания генерации настройки
# Если настройка завершилась ошибкой
⚠ Ошибка настройки — продолжение без настройки: <error message>
# В любом случае продолжаем перевод
Создание 12 перевод(ов)
[0/12] переводов завершено
your/file/path.mdx [es]С этим изменением мы теперь можем гарантировать, что ваши переводы будут генерироваться даже в маловероятном случае сбоя настройки.
Нам также нравится, что это дает вам больше прозрачности в том, как и где мы генерируем контент, который влияет на ваши переводы, и делает добавление новых шагов настройки беззаботным, поскольку они никогда не помешают выполнению перевода.
Загрузка
Мы также сделали upload более гибким. В ранних версиях предполагалось, что вы всегда отправляете исходный файл вместе с его переводами. Это подходит не для всех сценариев. Теперь вы можете:
- Загружать только исходные файлы (без переводов).
- Загружать исходники и переводы вместе.
Мы по‑прежнему автоматически определяем переводы по структуре вашего репозитория и конфигу. После загрузки вы сразу увидите файлы в своей панели управления.
Если ваш gt.config.json выглядит так:
{
"defaultLocale": "ru",
"locales": ["es", "fr"],
"files": {
"json": { "include": ["src/i18n/en/**/*.json"] }
}
}Выполнение npx gtx-cli upload:
# Только исходные файлы (локальные переводы не найдены):
Начинается загрузка...
Файлы для загрузки:
- src/i18n/en/common.json -> es, fr
...
Загрузка 1 файла в General Translation...
✔ Файлы успешно загружены
Готово!
# В панели управления вы увидите:
# src/i18n/en/common.json
# без соответствующих переводов.Если локализованные переводы присутствуют и были автоматически обнаружены:
Начинается загрузка...
Файлы для загрузки:
- src/i18n/en/common.json -> es, fr
Загрузка 3 файлов в General Translation...
✔ Файлы успешно загружены
Готово!
# В панели управления вы увидите:
# src/i18n/en/common.json
# а также переведённые версии на испанском и французском языках в выпадающем списке локалей.Если файл перевода локали отсутствует, мы загружаем исходный текст и пропускаем недостающий перевод.
Если у вас есть локальные переводы, но вы хотите загрузить только исходники, удалите локали из gt.config.json перед запуском upload:
{
"defaultLocale": "en",
"locales": [],
"files": {
"json": { "include": ["src/i18n/en/**/*.json"] }
}
}Загрузки перезаписывают существующие переводы
Важно: Когда вы запускаете
upload, любой переведённый файл, который мы находим и загружаем для заданного файла/локали, заменяет то, что сейчас хранится для этого файла/локали.
- Чтобы загружать только исходные тексты, удалите целевые локали из
gt.config.jsonперед запускомupload.- Если вам нужно сначала просмотреть изменения, используйте отдельный проект или экспортируйте текущие переводы перед загрузкой.
- Отсутствующие переводы пропускаются; существующие переводы перезаписываются.