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-glossaryExtract hard-coded UI strings
Finds hard-coded user-facing strings and moves them into an i18n catalog with meaningful keys and translator comments, without changing behaviour. Use when preparing an app for translation.
extract-ui-stringsPlan and implement right-to-left support
Plans and implements right-to-left layout support (logical properties, mirroring rules, bidi text, icons) for a web or mobile UI. Use when adding Arabic, Hebrew, Persian or Urdu.
plan-rtl-supportReview code for internationalization bugs
Reviews code for internationalization bugs such as concatenated strings, hard-coded date, number and currency formats, naive plurals, text expansion and RTL breakage. Use before adding new locales.
review-i18n-readinessWrite ICU plural and select messages
Converts messages with counts, gender or choices into correct ICU MessageFormat for each target locale's plural categories, with test values. Use when strings depend on a number or gender.
write-icu-plural-messages