# Translate Blog Post

> Translate one English blog post into multiple target languages via parallel sub-agents, preserving frontmatter conventions, hero image, and brand voice. Use when the user shares a published English post URL or markdown path and says 'translate it', 'add other languages', 'publish in DE/ES/RU/UK', 'translate to 5 languages', or asks for localized versions of a specific post.

- Skill: `razbakov/translate-blog-post` (Agent Skill)
- Install (CLI): `npx skillmds@latest add razbakov/translate-blog-post`
- Raw SKILL.md: https://api.skillmd.com/api/skills/razbakov/translate-blog-post/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: razbakov (https://skillmd.com/u/razbakov)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/razbakov/translate-blog-post

---


# Translate Blog Post

## When to use

Trigger this skill when:

- The user points at a single English blog post (URL, markdown filepath, or slug) and asks to translate it.
- They say "translate to 5 languages", "add German/Spanish/Russian/Ukrainian", "publish in other languages", "make multilingual versions".
- They want translations as a follow-up to publishing the original.

Do NOT use this for translating arbitrary text snippets, UI strings, or untouched non-blog content. This is specifically for blog posts that follow the repo's blog conventions.

## Inputs the skill needs

Confirm or read from the project's CLAUDE.md / repo conventions:

| Input | Where it usually lives |
|---|---|
| Source post path | User-provided URL or filepath |
| Target languages | User request, or default set in repo's CLAUDE.md (e.g. `de, es, ru, uk`) |
| Filename convention | An existing 5-lang post in the same repo |
| Frontmatter shape | An existing translation in the same repo |
| Per-language overrides | Repo's CLAUDE.md (e.g. RU/UK Telegram channel differs from EN) |
| Hero image policy | Repo's CLAUDE.md (usually shared across translations — same `image:` path) |

Read one existing 5-language post in the same repo before dispatching agents. Filename + frontmatter conventions are always per-repo and never inferred from training data.

## Workflow

### 1. Read the source

Read the full English markdown — frontmatter and body. Note:

- Title, description, hero image path
- Category and tags (tags are usually slugs; do NOT translate them)
- Telegram / messaging links
- Voice register (formal? conversational? second person? umlaut on the author's name?)

### 2. Dispatch one sub-agent per target language (parallel)

For each target language, dispatch one sub-agent (in Claude Code: the `Agent` tool with `subagent_type: general-purpose` and `run_in_background: true`). Each prompt must include:

- The exact filepath to write (matching repo convention)
- The full source markdown (so the agent translates from the canonical version, not a paraphrase)
- The frontmatter template with that language's overrides (`language: <lang>`, telegram channel if it differs, etc.)
- Translation rules (see below)
- Explicit instruction: **NO git commits**

All agent dispatches go in a single message (parallel). One agent per language, not one per paragraph.

### 3. Translation rules to include in every agent prompt

Tailor per language but always cover:

- **Voice & register** — match the source. First-person if source is. Conversational if source is. Don't make it more formal than the English.
- **Author's name** — preserve umlauts and accents (e.g. "Alösha" stays "Alösha"; in Cyrillic-script languages use the native form like "Алёша" / "Альоша").
- **Reserved nouns** — Newton, Einstein, brand names, the Matrix → keep as proper nouns (translate to local scripts only when conventional, e.g. Cyrillic).
- **Headings** — translate H2/H3 too. Don't leave English headings.
- **Cultural references** — use the localized version where it exists (e.g. "the spoon doesn't exist" → "ложки не существует" in RU, "la cuchara no existe" in ES).
- **Tags** — keep as English slugs (they're URL paths, not display text).
- **Form of address** — informal ("ты" / "tú" / "du") unless the source repo's voice guide says otherwise.
- **Native vocabulary** — for Ukrainian especially: write proper Ukrainian, not Russian-sounding Ukrainian. Same caution applies to any closely-related language pair.

### 4. Verify, commit, deploy

When all language agents report back:

- Confirm each file exists with correct frontmatter (`language:`, hero image path, title in the target language, etc.).
- Stage all translation files and commit in one commit. Push.
- Wait for the deploy.
- Verify each language URL returns 200 (the canonical i18n URL is usually `/<locale>/blog/<slug>-<locale>` — check an existing 5-lang post to confirm the pattern).
- Verify the localized title shows in the rendered HTML (curl + grep `<title>`).

Report back with the 5 URLs grouped by language.

## Common gotchas

- **i18n routing prefix.** Most Nuxt/Next sites with i18n route non-default-locale pages under `/<locale>/...`. Direct URLs without the prefix may also work (because the file is prerendered) but the canonical URL is the prefixed one — use that for sharing.
- **Translation state inheritance.** If the source post has `hidden: true` or `draft: true`, translations should usually inherit that. Confirm with the user before publishing translations of an unpublished essay.
- **Hero image is usually shared, not duplicated.** The same `/images/blog/<slug>/hero.png` works for all languages by default. Generate per-language images only when the hero embeds text or a culturally-specific symbol that wouldn't read in the target language.
- **Tags are slugs, not display text.** Translating tags breaks tag-based filtering and routing. Always keep the English slug.
- **Per-language messaging channels.** Some repos route RU + UK posts to a different Telegram/social channel than EN/DE/ES. Check the repo's CLAUDE.md for the mapping; don't hardcode.
- **Don't translate the date.** Date stays in ISO format.
- **Don't have agents do git work in parallel.** Same rule as essay-cluster-from-transcript — orchestrator commits, agents only write files.

## Optional: review pass

After translation, the user may want a native-speaker review pass. Note in the final report which languages would benefit (typically RU/UK if the user is more confident in those, ES if not). Don't auto-trigger reviews — leave that as a follow-up.

