Agent skill
idiomatic-translate
Translate strings idiomatically across multiple target languages using a project glossary, preserving tone, domain terminology, and format placeholders while flagging untranslatable content.
Install this agent skill to your Project
npx add-skill https://github.com/Fr-e-d/GAAI-framework/tree/main/.gaai/core/skills/cross/idiomatic-translate
SKILL.md
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
{
"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
{
"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:
- translated_string — the translated text in target language
- source_language_detected — auto-detected or confirmed source language (ISO 639-1: en, fr, de, es, etc.)
- target_language — target language (as requested)
- confidence — "high", "medium", "low" (based on ambiguity or cultural nuance)
- idiomaticity_score — 1-5 scale (5 = native speaker fluency, 1 = mechanical)
- notes — why this translation was chosen (reasoning, cultural decisions, tone adjustments)
- alternatives — 2-3 alternative translations with rationale for each
- 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" } }
- Example: "qualification_rate" → glossary should map:
- 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:
- Extract strings from codebase → JSON with
source_language,target_language,context - Batch translate to one or more target languages (parallel invocations OK)
- Use skill to generate translations with glossary + tone
- Review output — all "medium/low" confidence + idiomaticity_score < 4.0
- Iterate with skill if needed (provide feedback, alternative examples)
- Integrate into i18n JSON files (structure:
locales/{lang}/*.json) - Commit to version control
- 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).
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
ci-watch-and-fix
Watch GitHub Actions CI after PR creation, detect failures, extract logs, apply minimal fixes, and re-push — keeping the delivery session alive until CI resolves or escalating after 3 cycles. Activate immediately after gh pr create and before marking the story done.
qa-review
Validate that implemented code fully satisfies Story acceptance criteria, respects rules, and introduces no regressions. This is the hard quality gate — no pass means no delivery. Activate after implementation is complete.
compose-team
Assemble the context bundles for each sub-agent based on evaluate-story output. Produces spawn-ready packages for Planning, Implementation, QA, or MicroDelivery sub-agents. Activate after evaluate-story, before spawning any sub-agent.
coordinate-handoffs
Validate sub-agent handoff artefacts, sequence phase transitions, and manage retry and escalation logic. Activate after each sub-agent terminates to determine next action.
implement
Generate correct, minimal, maintainable code that satisfies a validated Story's acceptance criteria against an execution plan. Activate when a Story is validated, a plan exists, and all prerequisites are unambiguous.
delivery-high-level-plan
Transform validated Stories into a clear, minimal, governed execution plan. Used by the Planning Sub-Agent as the first planning pass before prepare-execution-plan for Tier 2/3, or as the sole planning output for simple Stories.
Didn't find tool you were looking for?