$npx -y skills add AgriciDaniel/claude-blog --skill blog-multilingualOne-command multilingual blog creation. Writes a blog post, translates it into user-specified languages, applies cultural adaptation, and emits hreflang tags, sitemap entries, and a CMS-ready language map. The complete write-to-publish pipeline for international content. Orchestr
| 1 | # Blog Multilingual, One-Command International Publishing |
| 2 | |
| 3 | The flagship multilingual orchestrator. Combines blog writing, translation, |
| 4 | cultural adaptation, and full international SEO into a single command. |
| 5 | Produces publication-ready blog posts in every target language with hreflang |
| 6 | tags, localized JSON-LD schema, and CMS-integration metadata. |
| 7 | |
| 8 | > Adapted from `claude-blog-multilingual` by Chris Mueller (AI Marketing Hub |
| 9 | > Pro Hub Challenge submission, March 2026, scored 85/100 Proficient). |
| 10 | > Original: https://github.com/Chriss54/multilingual-int |
| 11 | > This port removes the original `curl | bash` installer and credential |
| 12 | > handling flagged in the audit, integrates as core skills, and uses the |
| 13 | > shared cultural-adaptation reference under `blog-translate/references/`. |
| 14 | |
| 15 | ## Dependencies |
| 16 | |
| 17 | Invoked internally by this orchestrator: |
| 18 | |
| 19 | | Component | Source | Required | |
| 20 | |-----------|--------|----------| |
| 21 | | `blog-write` | claude-blog (this plugin) | Yes | |
| 22 | | `blog-translate` | claude-blog (this plugin) | Yes | |
| 23 | | `blog-localize` | claude-blog (this plugin) | Yes (when `--localize` is on, default) | |
| 24 | | `seo-hreflang` | claude-seo (sibling plugin) | No, falls back to a self-contained generator | |
| 25 | |
| 26 | If `seo-hreflang` is not installed, the orchestrator emits hreflang tags using |
| 27 | its own minimal generator (Phase 5 below) and notes the limitation in the |
| 28 | delivery summary. Hreflang validation in that case is structural only, not the |
| 29 | deeper validation `seo-hreflang` provides. |
| 30 | |
| 31 | ## Command Syntax |
| 32 | |
| 33 | ``` |
| 34 | /blog multilingual <topic> --languages <lang1,lang2,...> [--source <lang>] [--no-localize] [--format <md|mdx|html>] |
| 35 | ``` |
| 36 | |
| 37 | | Argument | Required | Default | Description | |
| 38 | |----------|----------|---------|-------------| |
| 39 | | `<topic>` | Yes | , | Blog topic or working title | |
| 40 | | `--languages` | Yes | , | Comma-separated ISO 639-1 codes (e.g. `de,fr,es,ja,pt-BR`) | |
| 41 | | `--source` | No | `en` | Source language to write the original in | |
| 42 | | `--no-localize` | No | off | Skip cultural adaptation (translation only) | |
| 43 | | `--format` | No | auto | Output format: `md`, `mdx`, or `html` | |
| 44 | |
| 45 | If `--languages` is missing, ask the user once before running anything: |
| 46 | "Which languages should the blog be published in? Provide ISO 639-1 codes |
| 47 | separated by commas (e.g., `de,fr,es,ja,pt-BR`). The post will be written in |
| 48 | `<source>` first, then translated." |
| 49 | |
| 50 | ## Workflow |
| 51 | |
| 52 | ### Phase 1: Configuration |
| 53 | |
| 54 | 1. Parse arguments. Extract topic, target languages, source, format. |
| 55 | 2. Validate each language code against ISO 639-1 (region suffixes like |
| 56 | `pt-BR`, `es-MX`, `zh-TW` are also accepted). |
| 57 | 3. Detect output format from the project (frontmatter convention, file |
| 58 | extensions, framework hints) or use `--format`. |
| 59 | 4. Resolve source language. If a target language equals `--source`, drop it |
| 60 | from the translation list with a notice. |
| 61 | 5. Create the output directory inside the current working directory: |
| 62 | ``` |
| 63 | multilingual/ |
| 64 | {source-lang}/ |
| 65 | {lang-1}/ |
| 66 | {lang-2}/ |
| 67 | ... |
| 68 | ``` |
| 69 | Output MUST stay inside the project root. Never write outside the cwd. |
| 70 | |
| 71 | Progress: `Phase 1: Configuration complete, [N] languages selected ([codes])` |
| 72 | |
| 73 | ### Phase 2: Write Original Blog |
| 74 | |
| 75 | Invoke the `blog-write` sub-skill (route through `/blog write` so all |
| 76 | existing rules apply: template auto-selection, sourced statistics, citation |
| 77 | capsules, FAQ schema, internal-link zones, charts, image embedding). Pass the |
| 78 | topic and any blog-write parameters surfaced by the user. |
| 79 | |
| 80 | Save the original to `multilingual/{source-lang}/{slug}.{ext}`. |
| 81 | |
| 82 | Progress: `Phase 2: Original written, multilingual/{source-lang}/{slug}.{ext}` |
| 83 | |
| 84 | ### Phase 3: Translate to All Target Languages |
| 85 | |
| 86 | For each target language, invoke `blog-translate`: |
| 87 | |
| 88 | - Input: the original blog post produced in Phase 2. |
| 89 | - Target: the specific language code. |
| 90 | - Run targets in parallel where the runtime supports it (one Task per |
| 91 | language) to reduce wall-clock time. |
| 92 | |
| 93 | Save translations to `multilingual/{lang}/{localized-slug}.{ext}`. |
| 94 | |
| 95 | Progress: `Phase 3: Translating to [lang] ([X]/[N])` per language, then |
| 96 | `Phase 3: All translations complete`. |
| 97 | |
| 98 | ### Phase 4: C |