Автоматический перевод блога с помощью Claude и GitHub Actions

Каждый пост, который я пишу, переводится автоматически. Claude выполняет перевод, коммитит результаты в main, и переведённые версии деплоятся вместе с оригиналом.

Процесс

Рабочий процесс перевода запускается в GitHub Actions, когда английский контент мержится в main:

on:
  push:
    branches: [main]
    paths:
      - 'content/**/*.en.md'
flowchart LR
    B[Мерж в main] --> C[Переводы сгенерированы]
    C --> D[Закоммичено в main]
    D --> E[Продакшен деплой со всеми языками]

Промпт

Рабочий процесс использует claude-code-action:

For each .en.md file that was added or modified:
1. Read the English content
2. Create translations for these languages: es, nl, de, it, fr, ja, zh, ru, hi
3. Save each translation as filename.{lang}.md (e.g., hello-world.es.md)
4. Preserve the frontmatter structure exactly, but translate the title
5. Translate the body content naturally
6. Keep code blocks, URLs, file paths, and technical terms unchanged

Один промпт обрабатывает все 9 языков. «Переводить естественно» даёт более плавный результат, чем «переведи этот текст». Блоки кода и технические термины остаются на английском.

Обработка Front Matter

Посты Hugo имеют YAML front matter. Некоторые поля нужно переводить (заголовок), другие нет (дата, slug):

«Сохраняй структуру frontmatter точно, но переводи заголовок»

Английский:

---
title: "Hello World"
date: 2025-12-20
draft: false
---

Хинди:

---
title: "नमस्ते दुनिया"
date: 2025-12-20
draft: false
---

Коммит

Рабочий процесс устанавливает идентичность бота и ограничивает возможности Claude:

- name: Setup git identity
  run: |
    git config --global user.email "claude[bot]@users.noreply.github.com"
    git config --global user.name "claude[bot]"

- name: Translate with Claude
  uses: anthropics/claude-code-action@v1
  with:
    claude_args: "--allowedTools 'Write,Bash(git:*)'"
    prompt: |
      ...
      Use `git add`, `git commit`, and `git push` to add the translations directly to main.

--allowedTools ограничивает Claude записью файлов и выполнением git-команд.

Качество

Достаточно хорошо для личного блога. Переводы Claude плавные и хорошо передают смысл. Носитель языка заметит иногда неуклюжие формулировки, но это лучше, чем я мог бы сделать сам.

Другие применения

Тот же паттерн работает для генерации документации, резюме changelog, написания сообщений коммитов и релизных заметок:

  1. Определить, что изменилось
  2. Отправить контент Claude с инструкциями
  3. Закоммитить результаты обратно в ветку