---
name: translation
description: Produce a native-quality, SEO-optimized translation of one post into one target language.
---

# Translate a Post

## Use this when

translate blog, translate post, blog translate.

## Process

Detect the source language from frontmatter `lang`, then HTML `lang`, then content analysis. Normalize every language code to a Google-compatible hreflang tag: lowercase ISO 639-1 language, optional title-case ISO 15924 script, optional uppercase ISO 3166-1 region (e.g. `de`, `fr`, `es-MX`, `pt-BR`, `zh-Hant`). Require a region or explicit neutral mode for ambiguous language-only targets like `es`, `pt`, or `zh`. If a target equals the source language, skip it with a notice.

Extract the translatable surface: frontmatter title/description/tags, all headings, body paragraphs, image alt text and captions, chart text labels, FAQ pairs, evidence-backed explanations, the Key Takeaways box, CTA text, and internal-link zone anchor text. Preserve unchanged: markdown/HTML structure, image and link URLs, frontmatter keys, code fences, SVG attributes, and schema structural keys (`@id`, URLs, organization/person names never get translated).

For the primary and each secondary keyword, decide per target market whether the source term is already the established term (keep it, e.g. "Content Marketing" stays in German) or whether a local equivalent has real search behavior (swap to it), then update title, meta description, and 2-3 headings consistently with that decision.

Translate naturally, never word-for-word: match the source's tone and register, adapt idioms to real local equivalents instead of translating literally, apply locale-correct number/date/currency/quote formats, and adjust SVG chart text length per locale (roughly +25-30% for German, +10-15% for French, -20% for Japanese, -25% for Chinese) by widening the viewBox rather than truncating.

Set translated frontmatter independently rather than mechanically carrying over the source (`title`, `description`, `slug`, `lang`, `translatedFrom`, `translatedDate`), and if the source has schema JSON-LD, set `inLanguage` and add `translationOfWork` pointing back to the source URL.

Before calling it done, scan for translation-quality failures and fix any found: literal idioms, unnatural word order forced from the source language, mixed-language sentences (other than established loanwords), and numbers/dates/currencies still in source format.

## Attribution

claude-blog credits this skill's methodology to Chris Mueller's claude-blog-multilingual submission (https://github.com/Chriss54/multilingual-int, license unverifiable — the repository is not currently publicly accessible). What's reused here is claude-blog's own MIT-licensed distributed text, the same basis as every other playbook in this team.
