Skip to content
Beta Multi-model support (OpenAI, Gemini, and more) launching soon.

translation-qa-reviewer

Installable Ships in copy-localization-generator — or copy the raw skill below.
Open Claude.ai

Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V.

ExperimentalNo security review

Translation QA Reviewer

Review a translated locale file against the English source and produce a structured QA report. Catches the issues that automated QA tools miss: tone drift, brand terminology violations, culturally inappropriate phrasing, and CMS-specific character overflow — not just missing keys and broken placeholders.

Usage

/translation-qa-reviewer <translated file>
  --source <source-file>
  [--locale <locale-code>]
  [--cms sitecore|optimizely|umbraco|headless]
  [--glossary <glossary-file>]
  [--strict]

Examples:

  • /translation-qa-reviewer src/locales/fr-CA.json --source src/locales/en.json --locale fr-CA
  • /translation-qa-reviewer translations/de.xliff --source en.xliff --cms sitecore --glossary docs/glossary-de.md
  • /translation-qa-reviewer content/fr/ --source content/en/ --locale fr-FR --strict

Phase 1 — File intake and structural diff

Read both the source and translated files. Detect format (JSON, XLIFF 1.2/2.0, Sitecore XML, Optimizely XML, Umbraco JSON, Markdown).

Structural checks (fail-fast)

Run these before linguistic checks:

Check Severity Description
Missing keys Critical Keys present in source but absent from translated file
Extra keys Warning Keys in translated file not present in source — stale strings
Empty values Critical Key present but value is empty string or whitespace only
Source-identical values High Value in translated file is byte-for-byte the same as English source — likely untranslated
Broken placeholders Critical Placeholder token present in source is missing or mutated in translation
ICU pattern corruption Critical ICU {count, plural, ...} structure malformed in translation
Embedded HTML corruption High HTML tags present in source are missing, unclosed, or reordered in translation

Output a Structural QA Summary before proceeding to linguistic review.


Phase 2 — Placeholder integrity check

For every string containing a placeholder, verify:

  1. The same number of placeholders appear in the translated string.
  2. The placeholder tokens are identical (same casing, same braces/sigil style).
  3. Named placeholders ({{username}}, {name}) retain their exact names — no translation.
  4. Positional placeholders (%1$s, {0}) retain their positions.

Report format for placeholder violations:

[CRITICAL] Placeholder corruption
Key: auth.login.welcome
Source: "Welcome back, {{username}}!"
Translation: "Bienvenue, {{nom}}!"
Issue: Placeholder renamed — {{username}} → {{nom}}. Runtime will fail.
Fix: Restore placeholder to {{username}}.

Phase 3 — Tone and register review

For each string flagged as linguistically reviewable (i.e. not a placeholder-only string, not a numeric/date token), assess:

Register consistency

  • Does the translation use a consistent level of formality throughout?
  • For European languages with formal/informal distinctions (de: Sie/du; fr: vous/tu; es: usted/tú): flag any inconsistencies within the file.
  • Flag any switch between formal and informal register mid-file.

Brand tone alignment

  • Are CTAs still imperative-verb-led in the target language?
  • Does the translation avoid weasel words that were excluded in the source?
  • Are marketing superlatives handled appropriately (some locales amplify; others understate)?

Naturalness

  • Flag translations that read as literal word-for-word from English (machine translation artifacts):
    • Unnatural word order
    • False cognates used incorrectly
    • Untranslated idiomatic expressions ("think outside the box" left as-is)
  • Severity: Medium — readable but sounds foreign to a native speaker.

Phase 4 — Terminology consistency

If a --glossary file is supplied, check every glossary term:

  • Brand name: must not be translated (e.g. "RBA" remains "RBA").
  • Product name: check for consistent usage — do not translate if the brief says "keep English".
  • Technical terms: verify the glossary's approved translation is used consistently.

If no glossary is supplied, check for internal consistency:

  • The same English source term should always be translated the same way within the file.
  • Flag cases where the same English source string has two different translations.

Report format:

[Medium] Terminology inconsistency
Term: "dashboard"
Occurrences: 8
Translations found: "tableau de bord" (6×), "panneau de contrôle" (2×)
Fix: Standardize to "tableau de bord" (preferred in fr-CA SaaS context).

Phase 5 — Character limit check

If --cms is set, check every translated string against the CMS field limits from reference.md.

For strings that exceed the limit:

  • Report the key, the translated string, the character count, and the limit.
  • Suggest a shortened alternative if the overflow is minor (< 20% over limit).

For strings approaching the limit (> 80% used):

  • Flag as Warning with the remaining headroom.

Report format:

[High] Character overflow
Key: nav.primary.solutions.label
CMS field: Sitecore Single-line Text (256 char limit)
Translated: "Nos solutions numériques pour l'expérience client" (50 chars)
Limit: 30 chars (navigation label)
Headroom: −20 chars
Fix: Shorten to "Solutions numériques" (20 chars) or "Nos solutions" (13 chars).

Phase 6 — RTL / bidi review

If locale is ar or he, flag all strings that may affect layout:

  • Navigation labels (menu items, breadcrumbs)
  • CTA labels (button text)
  • Form labels and placeholders
  • Toast and notification messages
  • Any string containing digits (digits may render LTR within RTL context — verify with UI)

Report format:

[Warning] RTL layout review required
Key: nav.primary.home.label
Value: "الرئيسية"
Note: Navigation label — verify right-to-left rendering in the target component.
      Digits in adjacent strings may require bidi isolation (unicode-bidi: isolate).

Phase 7 — QA report output

Produce a structured QA report in Markdown.

# Translation QA Report

**File:** [translated file path]
**Source:** [source file path]
**Locale:** [locale code]
**CMS:** [cms name]
**Glossary:** [file path or "none"]
**Date:** [YYYY-MM-DD]
**Reviewer:** translation-qa-reviewer skill v0.1.0

---

## Summary

| Severity | Count |
|---|---|
| Critical | [n] |
| High | [n] |
| Medium | [n] |
| Warning | [n] |
| Pass | [n] |

**Overall status:** [FAIL — critical issues present | REVIEW — no criticals, high/medium issues |
PASS — warnings only | CLEAN — no issues]

---

## Findings

### Critical

#### [FINDING-001] Placeholder corruption
...

### High

#### [FINDING-002] Character overflow
...

### Medium
...

### Warnings
...

---

## Passed checks

- Structural diff: all keys present
- No empty values
- ...

Severity definitions

Severity Definition Blocks release?
Critical Will cause a runtime error, broken UI, or complete loss of meaning Yes
High Incorrect output visible to users; character overflow breaks layout Yes (recommend)
Medium Suboptimal translation — sounds unnatural, inconsistent terminology Recommend fix before release
Warning Informational — layout review needed, approaching character limit Log; fix in next iteration
Pass No issue found —

--strict mode: escalates all Medium findings to High and all Warnings to Medium.


Reference

See reference.md in this skill folder for:

  • CMS character limit table by field type
  • Common machine translation artifact patterns by language
  • Glossary template
Technical details
Plugin
copy-localization-generator
Author
Dakota Smith
Skill name
translation-qa-reviewer
Maturity
experimental
Security review
No security review
Owners
  • design
  • strategy
Argument hint
<translated file> --source <source-file> [--locale <locale-code>] [--cms sitecore|optimizely|umbraco|headless] [--glossary <glossary-file>] [--strict]
Allowed tools
  • Read
  • Write
  • Edit
  • Bash(find *)
  • Bash(ls *)
  • Bash(cat *)
  • Bash(grep *)
  • Bash(diff *)
Source
plugins/copy-localization-generator/skills/translation-qa-reviewer/SKILL.md

Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.