Translation Quality Review
Most i18n setups already catch a missing key mechanically. Nobody
automates whether the translation that IS there reads naturally, uses
consistent terminology, or is quietly still in the source language. This
skill does that read-through, plus the layout risk that follows from
verbose translations in narrower UI contexts.
Works on any multi-language site regardless of the i18n mechanism — the
review operates on the rendered/extracted strings, not the storage
format.
When not to use this
- Key-parity/missing-key checks → that's a mechanical, already-solved
problem in most i18n setups (e.g. this project's own
i18n-check.py).
Confirm that's green first; don't duplicate it here.
- Launch-critical copy that needs a guarantee of fluency → a model
read-through is a useful first pass, not a substitute for a native
speaker or professional translator sign-off. Say so explicitly in the
findings rather than implying a confidence level the review doesn't
have.
- Layout breakage itself (as opposed to flagging the risk of it) →
hand length-risk findings to
responsive-visual-review to confirm
visually; this skill only estimates risk from string length, it doesn't
render anything.
Phase 0 — Scope
- Which locales and which files/pages to review (default: every
non-source locale the site ships, sampled across the same page set
used elsewhere in the audit if one exists).
- Confirm key-parity is already green (skip re-deriving that here — if
it isn't green, that's a different, prior problem to fix first).
- Identify the project's own style guide if one exists (tone-of-voice
docs, per-language style notes) — read it before judging tone, since
"correct" tone is project-specific, not universal.
Phase 1 — Per-locale read-through
For each non-source locale, compare every translated string against the
source-language original and flag:
- Literal/awkward, machine-translation-sounding phrasing — reads
correct word-for-word but unnatural in the target language.
- Placeholder/variable mismatches — a
{name}/%s/{{count}}-style
placeholder present in the source but missing, renamed, or malformed in
the translation (this is a functional bug, not just a style issue — it
can break at runtime).
- Untranslated leftover strings — still in the source language where
a translation was expected.
- Terminology inconsistency — the same concept translated two
different ways across different pages/keys in the same locale (confuses
readers more than a single, consistently "good enough" choice would).
- Tone mismatch against the project's own style guide, if one exists.
Phase 2 — Length/layout risk
Flag strings where the translation is meaningfully longer than the source
(rule of thumb: >30% longer character count) in UI-constrained contexts
specifically — button labels, nav items, form labels, badges — not
long-form body text, where extra length rarely breaks anything.
German and Finnish compound nouns, and French's typical verbosity
relative to English, are the most common sources of this; don't assume
it's isolated to any one language pair, though — check what the source
language actually is for this project.
Hand any flagged strings to responsive-visual-review (or a manual
screenshot check at the narrowest breakpoint) to confirm whether the
length risk actually manifests as a visible break.
Phase 3 — Findings
Per locale, severity-ranked:
| Severity |
Examples |
| Critical |
Broken placeholder causing a runtime error, or a visibly broken/garbled string in production |
| High |
Untranslated leftover string, or a translation that changes the actual meaning |
| Medium |
Awkward/literal phrasing, terminology inconsistency within a locale |
| Low |
Minor tone drift from the style guide, cosmetic wording preference |
State explicitly in the report's summary that this is a model-assisted
first pass, not a certified linguistic sign-off — recommend native-speaker
review for anything flagged Critical or High before it ships, and for any
locale that has never had a native-speaker pass at all.
1---2name: translation-quality-review3description: Reviews actual translation quality across a multi-language site's locales — not whether every key exists (most i18n setups already automate that) but whether the translation itself is correct, natural, and consistent — literal phrasing, broken placeholders, untranslated leftovers, terminology drift, and length-driven layout risk. Works on any multi-language website, any i18n mechanism (client-side JSON, per-locale pages, CMS). Trigger on "review our translations", "check the French/German/Dutch copy", "is this correct in language X", or after updating locale content. NOT a substitute for a professional translator or native-speaker sign-off on launch-critical copy — flag uncertainty rather than assert fluency the model doesn't have. NOT a key-parity check — confirm the project's own parity check is green first; this assumes every key exists and asks whether the translation is any good.4---56# Translation Quality Review78Most i18n setups already catch a missing key mechanically. Nobody9automates whether the translation that IS there reads naturally, uses10consistent terminology, or is quietly still in the source language. This11skill does that read-through, plus the layout risk that follows from12verbose translations in narrower UI contexts.1314Works on any multi-language site regardless of the i18n mechanism — the15review operates on the rendered/extracted strings, not the storage16format.1718## When not to use this1920- **Key-parity/missing-key checks** → that's a mechanical, already-solved21 problem in most i18n setups (e.g. this project's own `i18n-check.py`).22 Confirm that's green first; don't duplicate it here.23- **Launch-critical copy that needs a guarantee of fluency** → a model24 read-through is a useful first pass, not a substitute for a native25 speaker or professional translator sign-off. Say so explicitly in the26 findings rather than implying a confidence level the review doesn't27 have.28- **Layout breakage itself** (as opposed to flagging the *risk* of it) →29 hand length-risk findings to `responsive-visual-review` to confirm30 visually; this skill only estimates risk from string length, it doesn't31 render anything.3233## Phase 0 — Scope34351. Which locales and which files/pages to review (default: every36 non-source locale the site ships, sampled across the same page set37 used elsewhere in the audit if one exists).382. Confirm key-parity is already green (skip re-deriving that here — if39 it isn't green, that's a different, prior problem to fix first).403. Identify the project's own style guide if one exists (tone-of-voice41 docs, per-language style notes) — read it before judging tone, since42 "correct" tone is project-specific, not universal.4344## Phase 1 — Per-locale read-through4546For each non-source locale, compare every translated string against the47source-language original and flag:48- **Literal/awkward, machine-translation-sounding phrasing** — reads49 correct word-for-word but unnatural in the target language.50- **Placeholder/variable mismatches** — a `{name}`/`%s`/`{{count}}`-style51 placeholder present in the source but missing, renamed, or malformed in52 the translation (this is a functional bug, not just a style issue — it53 can break at runtime).54- **Untranslated leftover strings** — still in the source language where55 a translation was expected.56- **Terminology inconsistency** — the same concept translated two57 different ways across different pages/keys in the same locale (confuses58 readers more than a single, consistently "good enough" choice would).59- **Tone mismatch** against the project's own style guide, if one exists.6061## Phase 2 — Length/layout risk6263Flag strings where the translation is meaningfully longer than the source64(rule of thumb: >30% longer character count) in UI-constrained contexts65specifically — button labels, nav items, form labels, badges — not66long-form body text, where extra length rarely breaks anything.6768German and Finnish compound nouns, and French's typical verbosity69relative to English, are the most common sources of this; don't assume70it's isolated to any one language pair, though — check what the source71language actually is for this project.7273Hand any flagged strings to `responsive-visual-review` (or a manual74screenshot check at the narrowest breakpoint) to confirm whether the75length risk actually manifests as a visible break.7677## Phase 3 — Findings7879Per locale, severity-ranked:8081| Severity | Examples |82|----------|----------|83| Critical | Broken placeholder causing a runtime error, or a visibly broken/garbled string in production |84| High | Untranslated leftover string, or a translation that changes the actual meaning |85| Medium | Awkward/literal phrasing, terminology inconsistency within a locale |86| Low | Minor tone drift from the style guide, cosmetic wording preference |8788State explicitly in the report's summary that this is a model-assisted89first pass, not a certified linguistic sign-off — recommend native-speaker90review for anything flagged Critical or High before it ships, and for any91locale that has never had a native-speaker pass at all.