QA a translated string catalog
QA-checks a translated catalog against its source for placeholder mismatches, broken syntax, truncation risk, terminology drift and untranslated strings. Use before merging translations.
Translation QA catches the defects that crash or embarrass the app before users see them. In rough order of cost: a renamed or dropped placeholder that throws at runtime or prints {name}, broken ICU or file syntax that fails the whole catalog, missing keys that fall back to English mid-screen, a label too long for its button, and the same product term translated three different ways. Judging fluency is secondary and needs a native speaker. Mechanical checks must be exhaustive.
Check the translation against the source.
Source:
Translation:
Glossary:
Work through every key. Do not sample.
- Coverage: keys missing from the translation, extra keys not in the source, empty values, and values identical to the source. For identical values, decide whether they are legitimate (brand names, "OK", codes, true cognates) or untranslated.
- Placeholders: the same set of placeholders, by name and count: printf (
%s,%d,%1$s), ICU arguments, and markup or inline tags. Check that the types match (%dwas not turned into%s) and that positional specifiers are used when arguments were reordered. - ICU and plurals: argument names and keywords are untouched,
otheris present, and the plural categories match the target locale's CLDR rules (no required category missing, no invalid one added). - Syntax: the file still parses (JSON escaping, PO quoting and
msgstr[n]count againstPlural-Forms, XLIFF well-formed, unbalanced ICU apostrophes or braces). - Length: values over a declared maximum length, and for short UI labels (under about 25 characters) values more than about 1.5 times the source length. Mark these as truncation risks.
- Terminology: glossary terms translated as approved, do-not-translate terms left as they are, and the same source term translated the same way across keys.
- Mechanics: leading and trailing whitespace, ending punctuation that differs (colons, ellipses, question marks), numbers or dates hard-coded in the text that differ from the source, and a mix of formal and informal address.
- Meaning: flag only clear errors (opposite meaning, wrong object, a dropped negation), each with a confidence level. Leave style preferences out.
- Severity: blocker for anything that can crash, fail to parse or show raw placeholders; major for missing translations, wrong meaning, glossary violations and length overflows; minor for punctuation, whitespace and consistency.
- Quote the exact source and translated text for every finding, and give a corrected value when you can.
- If the two files are in different formats or clearly do not correspond, say so and stop.
- Separate what you verified from what you inferred. Mark inferences as such.
- When you do not know, say "I don't know" once and state what would settle it.
Verdict
One line: ship / ship after fixes / do not ship. Then counts by severity, and the number of keys checked.
Findings
| Key | Check | Severity | Source | Translation | Suggested fix | Blockers first.
Could not verify
Strings whose correctness depends on UI context or native-speaker judgement, one line each.
2 required values still a placeholder; the assistant will ask for them.
details
- kind
- Prompt: a task you run by name to get one finished thing back
- domain
- Software engineering
- category
- Localization (software)
- level
- Intermediate
- made for
- Software engineer, Frontend engineer, Product manager, Editor
- risk
- read-only
- version
- v1.0.0 · incubating
- reviewed
- 2026-10-02
- works in
- Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Antigravity, OpenCode, Windsurf, Zed, Continue, AGENTS.md, ChatGPT, claude.ai
use in
npx @hermes-hq/hodios install review-translated-strings --target claude-codenpx skills add hermes-hq/hodios-dist --skill review-translated-strings -a claude-codeclaude plugin marketplace add hermes-hq/hodios-distclaude plugin install hodios-software-engineering@hodiosThe plugin brings every entry in this domain at once.
pairs well with
All of Localization (software)Translate a software string catalog
Translates a software string file (JSON, PO, XLIFF, ARB, Android or Apple strings) keeping keys, placeholders, plurals and length limits intact. Use when localizing an app's UI text.
translate-string-catalogBuild a localization glossary
Builds a product term base from UI strings, with definitions, do-not-translate terms and proposed translations per locale, so localization stays consistent. Use before the first translation round.
build-localization-glossaryApp localisation track
Takes an English-only app to its first extra language in gated steps, from readiness scan and string extraction to formatting fixes, pseudo-localisation, translation hand-off and linguistic QA.
app-localization-trackAutomate translation file sync
Designs the pipeline between a repo and translators, with key extraction, upload to a translation system or vendor, download of finished locales, CI checks for keys and fallbacks, and approvals.
automate-translation-file-syncDesign international name and address fields
Designs form fields, validation and storage for personal names, postal addresses and phone numbers that work across countries. Use for international sign-up, checkout or shipping forms.
design-international-address-and-name-fieldsDesign locale detection and routing
Designs how a web or mobile app picks and remembers language and region, with negotiation, explicit choice, URL strategy, hreflang, fallback chains and language kept separate from currency.
design-locale-detection-and-routing