Traducciones Automáticas del Blog con Claude y GitHub Actions

Cada publicación que escribo se traduce automáticamente. Claude maneja la traducción, confirma los resultados en main, y las versiones traducidas se despliegan junto con la original.

El Flujo

El flujo de trabajo de traducción se ejecuta en GitHub Actions cuando el contenido en inglés se fusiona a main:

on:
  push:
    branches: [main]
    paths:
      - 'content/**/*.en.md'
flowchart LR
    B[Fusionar a main] --> C[Traducciones generadas]
    C --> D[Confirmado en main]
    D --> E[Despliegue a producción con todos los idiomas]

El Prompt

El flujo de trabajo usa 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

Un solo prompt maneja los 9 idiomas. “Traducir naturalmente” produce un resultado más fluido que “traduce este texto.” Los bloques de código y términos técnicos permanecen en inglés.

Manejo del Front Matter

Las publicaciones de Hugo tienen front matter en YAML. Algunos campos deben traducirse (título), otros no (fecha, slug):

“Preserva la estructura del frontmatter exactamente, pero traduce el título”

Inglés:

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

Hindi:

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

El Commit

El flujo de trabajo configura una identidad de bot y restringe lo que Claude puede hacer:

- 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 limita a Claude a escribir archivos y ejecutar comandos de git.

Calidad

Suficientemente bueno para un blog personal. Las traducciones de Claude son fluidas y capturan bien el significado. Un hablante nativo notaría frases ocasionalmente torpes, pero es mejor de lo que yo podría hacer.

Otros Usos

El mismo patrón funciona para generación de documentación, resúmenes de changelog, escritura de mensajes de commit y notas de versión:

  1. Detectar qué cambió
  2. Enviar contenido a Claude con instrucciones
  3. Confirmar resultados de vuelta a la rama