Skip to content
Back to skills

Idiomatic Translate

ASecurity

Translate strings idiomatically across multiple target languages using a project glossary, preserving tone, domain terminology, and format placeholders while flagging untranslatable content.

  • 162 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentsgoapici/cd

Works with

  • api

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add digipulse-engineering/GAAI-framework --skill idiomatic-translate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Idiomatic Translate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Idiomatic Translate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/digipulse-engineering-idiomatic-translate/badge)](https://www.skillsdirectory.com/skills/digipulse-engineering-idiomatic-translate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
type: skill
id: idiomatic-translate
name: idiomatic-translate
description: Translate strings idiomatically across multiple target languages using a project glossary, preserving tone, domain terminology, and format placeholders while flagging untranslatable content.
layer: cross
category: content
created_at: 2026-03-02
updated_at: 2026-03-02
---

# Skill: Idiomatic Translate (Multi-Language)

## Purpose

Translate copy from any source language to any target language with idiomatic fluency, cultural awareness, domain expertise, and consistent voice — language-agnostic pattern optimized for B2B SaaS platforms.

> **Usage context:** Bulk translation of UI copy, help text, error messages, and onboarding content. Automatically detects source language. Replaces mechanical translation with culturally-aware, tonally-consistent output in the target language.

---

## Input

```json
{
  "source_string": "You pay $0.50 per direct link request",
  "source_language": null,                    // null = auto-detect, or explicit: "en", "fr", "de", "es"
  "target_language": "fr",                    // required: "en", "fr", "de", "es", "it", "pt", "nl", etc.
  "context": {
    "domain": "billing",                       // domain expertise context
    "component": "PricingCard",
    "tone": "transparent",                     // transparent, benevolent, precise, casual, formal, technical
    "audience": "expert",                      // expert, prospect, admin, user
    "key": "billing.directLink.perRequest"
  },
  "glossary": {
    "direct link": "lien direct",              // source term : target term (or multi-lang)
    "request": "demande",
    "lead": "prospect",
    "milestone": "jalon"
    // Can also use language-keyed format:
    // "direct link": { "fr": "lien direct", "de": "direkter Link", "es": "enlace directo" }
  },
  "regional_preferences": {
    "currency": "EUR",                         // override default currency ($→€, etc.)
    "date_format": "DD/MM/YYYY",
    "number_format": "de_DE"                   // locale code for number formatting
  },
  "notes": "Avoid formal 'vous' / use informal 'tu', clarify that €0.50 is machine cost not per-lead"
}
```

## Output

```json
{
  "translated_string": "Tu paies 0,50 € par demande traitée",
  "source_language_detected": "en",
  "target_language": "fr",
  "confidence": "high",                         // high, medium, low
  "idiomaticity_score": 4.5,                    // 1-5 scale (5 = native speaker fluency)
  "notes": "Changed 'requête' to 'demande' (more natural in billing context). Used '€' instead of '$' for FR audience. Used informal 'tu' per context. Tone: factual, reassuring.",
  "alternatives": [
    {
      "text": "Tu paies 0,50 € par traitement de demande",
      "note": "More formal variant"
    },
    {
      "text": "Chaque demande te coûte 0,50 €",
      "note": "More casual variant"
    }
  ],
  "cultural_notes": "French audience expects € currency and informal 'tu' in UX context. 'Demande' is more natural than 'requête' in billing."
}
```

---

## Translation Principles (Universal)

### 1. **Idiomatic > Literal**
- ❌ "You pay $0.50 per request" → literal French: "Vous payez 0,50 $ par requête"
- ✅ "You pay $0.50 per request" → idiomatic French: "Vous payez 0,50 € par demande"

(Reasoning: FR audience expects €, not $. "Demande" is more natural than "requête" in billing context.)

**For any language pair:** Prioritize cultural norms, expected terminology, and natural phrasing over word-for-word mapping.

### 2. **Domain-Aware Glossary Alignment**

Glossary can be:
- **Flat (single language pair):** `{ "source": "target" }`
- **Multi-language keyed:** `{ "term": { "en": "...", "fr": "...", "de": "..." } }`

Example (project domain):

| EN | FR | DE | ES |
|---|---|---|---|
| **Lead** | prospect | Lead / Interessent | prospecto |
| **Direct link** | lien direct | direkter Link | enlace directo |
| **Milestone** | jalon | Meilenstein | hito |
| **Expertise** | domaine de compétence | Fachgebiet | área de expertise |
| **Spending limit** | limite de dépenses | Ausgabenlimit | límite de gasto |

**Skill behavior:** Always check glossary first. If term exists in target language, use it. If not, translate idiomatically and flag for glossary update.

### 3. **Universal Tone & Voice Principles**

Define voice once, apply across all languages:

| Attribute | Principle | EN Example | FR Example | DE Example |
|---|---|---|---|---|
| **Transparent** | Explain the WHY | "You pay for qualified leads" | "Vous payez pour les prospects qualifiés" | "Sie zahlen für qualifizierte Leads" |
| **Benevolent** | Avoid blame | "Honest experts get better leads" | "Les experts honnêtes reçoivent de meilleurs prospects" | "Ehrliche Experten erhalten bessere Leads" |
| **Precise** | Avoid vague terms | "50 free requests" | "50 demandes gratuites" | "50 kostenlose Anfragen" |
| **Multi-lang ready** | Avoid untranslatable idioms | Prefer universal phrasing | Structure that works across languages | Cultural idioms verified in target lang |

### 4. **Context-Aware Adaptation**

These apply to ANY language pair:
- **Audience:** Expert (formal) vs Prospect (friendly) → affects formality level
- **Urgency:** Error message (concise) vs Help text (detailed) → affects length
- **Domain:** Billing (precise) vs Onboarding (encouraging) → affects tone
- **Length:** Button text has tight constraints → abbreviation strategies per language
- **Regional preferences:** Currency, date format, number separators (e.g., $, €, CHF; DD/MM/YYYY vs MM/DD/YYYY; 1.000,50 vs 1,000.50)

---

## Acceptance Criteria for Translation Quality (Universal)

- [ ] **AC1:** No word-for-word translation (idiomatic fluency required in target language)
- [ ] **AC2:** Glossary consistency — if term exists, use it; if not, flag for addition
- [ ] **AC3:** Tone matches voice definition (transparent, benevolent, precise) across language
- [ ] **AC4:** No untranslatable idioms (if source uses culturally-specific metaphor, adapt to target culture)
- [ ] **AC5:** Character length ≤ 120% of original (avoid unnecessary bloat on buttons/short fields)
- [ ] **AC6:** Regional preferences respected (currency, date format, number formatting)
- [ ] **AC7:** If uncertainty, provide 2-3 alternatives + rationale for each
- [ ] **AC8:** Cultural notes provided (e.g., "German audience expects formal 'Sie' in B2B context")

---

## Output Format

Always return:
1. **translated_string** — the translated text in target language
2. **source_language_detected** — auto-detected or confirmed source language (ISO 639-1: en, fr, de, es, etc.)
3. **target_language** — target language (as requested)
4. **confidence** — "high", "medium", "low" (based on ambiguity or cultural nuance)
5. **idiomaticity_score** — 1-5 scale (5 = native speaker fluency, 1 = mechanical)
6. **notes** — why this translation was chosen (reasoning, cultural decisions, tone adjustments)
7. **alternatives** — 2-3 alternative translations with rationale for each
8. **cultural_notes** — any culture-specific context or expectations in target language region

---

## Batch Workflow (Recommended)

Translate in batches (language pair agnostic):

```
Input: Array of {
  source_string,
  source_language: null or "en"/"fr"/"de"/etc.,
  target_language: "fr" or "de" or "es"/etc.,
  context,
  glossary
}

Process:
1. Auto-detect source language (if not provided)
2. Translate each string to target language
3. Apply domain glossary, tone, regional preferences
4. Provide alternatives + confidence scores

Output: JSON array {
  key,
  source_language_detected,
  target_language,
  translated_string,
  confidence,
  idiomaticity_score,
  notes,
  alternatives,
  cultural_notes
}

Review: Human expert reads all "medium/low" confidence items + "idiomaticity_score" < 4.0
Finalize: Choose final translation or iterate with skill
```

**Velocity:** ~50-80 strings per batch per language pair (1-2 hours with review).
**Scaling:** Batch translate to DE, ES, IT simultaneously (parallel skill invocations).

---

## Known Constraints

- **Terminology drift:** New terms must update glossary immediately (reuse across all language pairs)
  - Example: "qualification_rate" → glossary should map: `{ "qualification_rate": { "en": "qualification rate", "fr": "taux de qualification", "de": "Qualifizierungsquote" } }`
- **Context dependency:** Same source phrase can translate differently in billing vs error context — always provide context
- **Humor/idioms:** Culture-specific wordplay is hard to translate idiomatically — flag for manual review or rephrase
- **Regional variants:** Same language can have regional differences (e.g., European Spanish vs Latin American Spanish, European Portuguese vs Brazilian Portuguese)
- **Names/proper nouns:** Keep unchanged (your project name, n8n, Zapier, OpenAI, etc.)
- **Currency/date/number:** Use regional preferences to adapt formatting

---

## Language Coverage & Auto-Detection

**Supported languages (confidence > 95%):**
- EN (English), FR (Français), DE (Deutsch), ES (Español), IT (Italiano), PT (Português), NL (Nederlands)
- Extensible to others (JA, ZH, etc.) with similar workflow

**Auto-detection:** Claude's native language detection used if `source_language` is null. Explicit source language preferred if known.

---

## Notes for Delivery Agent

This skill is **discovery-phase only** (creates translated content artefacts). The Delivery Agent will:

1. **Extract strings** from codebase → JSON with `source_language`, `target_language`, `context`
2. **Batch translate** to one or more target languages (parallel invocations OK)
3. **Use skill** to generate translations with glossary + tone
4. **Review output** — all "medium/low" confidence + idiomaticity_score < 4.0
5. **Iterate** with skill if needed (provide feedback, alternative examples)
6. **Integrate** into i18n JSON files (structure: `locales/{lang}/*.json`)
7. **Commit** to version control
8. **Update glossary** with any new terms discovered during translation

**Post-MVP automation:** CI/CD pipeline can auto-translate new strings → PR (human review required for merge). This skill can handle the automation.

**Multi-language parallelization:** Extract strings once, translate to FR, DE, ES simultaneously (3 parallel skill invocations = faster than sequential).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.