npx skills add ...
npx skills add agricidaniel/claude-blog --skill blog-localize
Deep cultural adaptation of translated blog posts. Run after blog-translate completes. Goes beyond translation to swap brand examples, adapt CTAs, substitute legal references, localize statistic sources where possible, and adjust formality (Sie/du, tu/vous, formal/informal). Built-in profiles for DACH, Francophone, Hispanic, and Japanese markets. Use when user says "localize blog", "blog localize", "cultural adaptation", "adapt for Germany", "lokalisieren", "localiser", "adaptar".
npx skills add agricidaniel/claude-blog --skill blog-localize
Takes a translated blog post and performs cultural adaptation so the result
feels like it was written for the target market, not translated into it.
This is the layer above blog-translate: it replaces examples, adjusts
tone, swaps references, and localizes the entire reading experience.
Adapted from
claude-blog-multilingualby Chris Mueller (Pro Hub Challenge, March 2026). Original: https://github.com/Chriss54/multilingual-int
../blog-translate/references/cultural-adaptation.md, the shared cultural
profiles file with substitution tables for DACH, Francophone, Hispanic,
Japanese, and a custom template. Do not duplicate this file.blog-translate produces a base translation.blog-translate, blog-multilingual, and blog-locale-audit: ISO 639-1
language in lowercase, optional ISO 15924 script in title case, optional
ISO 3166-1 Alpha-2 region in uppercase. Accept full codes (de-DE,
fr-CA, es-MX, pt-BR, zh-Hant) and unambiguous plain language codes
(de, fr). Require a region or explicit neutral mode for ambiguous
language-only targets such as es, pt, and zh.../blog-translate/references/cultural-adaptation.md.
Scan for elements that signal foreign origin:
| Element | What to look for |
|---|---|
| Brand examples | US or UK brands with no relevance locally |
| Statistics sources | US-only studies and surveys |
| CTAs | American-style aggressive calls-to-action |
| Idioms | Literally translated English expressions |
| Legal references | Foreign laws (CCPA, FTC) where local law applies (DSGVO, RGPD) |
| Cultural references | Foreign holidays, events, customs |
| Currency and pricing | USD without conversion or context |
| Tone | Too casual or too formal for the target market |
| Address form | Inconsistent Sie/du, tu/vous, formal/informal |
Output an audit report listing every target with severity (critical, recommended, optional).
Swap foreign examples for local equivalents:
https URLs only; reject
javascript:, data:, file:, localhost, loopback, private, link-local,
multicast, and reserved IPs after DNS resolution; disable redirects or
validate the final URL with the same checks; cap redirects, response size,
and request time; log the final URL and access date.Rewrite calls-to-action per the cultural profile:
Profiles in ../blog-translate/references/cultural-adaptation.md provide
substitution tables. Common examples:
| Source (US) | DACH | FR | ES (Spain) | LATAM | JA |
|---|---|---|---|---|---|
| Walmart | MediaMarkt | Carrefour | El Corte Inglés | Walmart MX | Aeon |
| Target | Saturn | Auchan | Hipercor | Liverpool | Ito-Yokado |
| FTC | Bundeskartellamt | DGCCRF | CNMC | PROFECO (MX) | JFTC |
| CCPA | DSGVO | RGPD | RGPD | LFPDPPP (MX), Ley 1581 (CO), Ley 25.326 (AR), LGPD (BR) | APPI |
inLanguage.Save the localized version. Default: write a reviewed copy as
{slug}-localized.{ext}. Only overwrite the translated file when the user
asks for overwrite; before overwriting, create a timestamped backup and
show a diff summary. Resolve every output path inside the project root and
reject traversal, symlinked paths, or writes outside that root.
Present the summary:
| Scenario | Action |
|---|---|
| No cultural profile for the locale | Build a minimal profile from the custom-locale template, proceed |
| File is not in the expected language | Warn the user, offer to translate first |
| No local statistics available | Keep the original stat with a geographic-scope note |
Locale code ambiguous (e.g., pt) | Ask: "Did you mean pt-BR (Brazil) or pt-PT (Portugal)?" |
/blog translate <file> --to <code>/blog locale-audit <directory>/blog multilingual <topic> --languages <codes>