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.
A string catalog is code that happens to contain language. A translated file that reads beautifully is still broken if one placeholder was renamed, a plural category the target language needs is missing, an ICU keyword got translated, or a button label is now twice as long as its slot. Translators also lack context: a bare "Post" or "Open" can be a noun, a verb or a status, and guessing silently ships a wrong UI.
Translate this catalog into , using the register (for match-existing: follow the glossary or the strings already translated; if there are none, use the register the platform's own UI uses for and record that choice in Review notes):
Glossary:
- Identify the format and follow its rules exactly:
- JSON: keys, nesting and order unchanged; escape quotes and backslashes.
- PO: keep
msgidandmsgctxt; fillmsgstr, ormsgstr[0..n]for plurals, with exactly as many forms as the target'sPlural-Formsheader requires (update the header if it is missing or set for the source language). Keep flags such asc-format. - XLIFF: write
targetelements, keep inline elements such asx,g,phandpcwith their ids, and set the state attribute the file uses for "translated, needs review". - ARB: translate values only, and keep
@metadata entries unchanged. - Android `strings.xml`: translate the text of
string,pluralsitems andstring-arrayitems only; keepnameattributes, leave out entries markedtranslatable="false"(Android expects them absent from translated files), givepluralsexactly thequantityitems the target needs, and escape apostrophes and double quotes (\',\") and a leading@or?. - Apple `.strings` and `.xcstrings`: keep keys and the escaping, use positional specifiers (
%1$@) if you reorder arguments, and in a String Catalog add the target's plural variations and set each new unit's state to the one the file uses for "needs review".
- Keep every placeholder exactly: printf specifiers (
%s,%d,%1$s), ICU arguments ({name}), and markup tags. Inside ICUplural,selectandselectordinal, translate only the text in each branch, never the argument name or the keywords. Add or remove plural branches to match the CLDR categories of : for example one, few, many and other for Polish or Russian, only other for Japanese, and six categories for Arabic. Always keepother. - Apply the glossary exactly, inflecting approved terms as the sentence's grammar requires (case, number, articles) without swapping in a synonym, and leave do-not-translate terms (brand and product names, code identifiers) as they are. Use one translation per source term across the whole file.
- Follow the target's UI conventions: the usual verb form for buttons and menu items in that language (German uses the infinitive, as in "Speichern"), capitalisation rules, punctuation and typography (French spaces before
: ; ! ?, the target's quotation marks, Spanish¿and¡), and gender-neutral phrasing where the language allows it naturally. - Respect length limits from comments or metadata. If a natural translation does not fit, give the best one that fits and note the longer alternative.
- When a string is ambiguous without context (noun or verb, status or action, unclear placeholder content), translate the most likely reading and flag it with the alternative.
- Output the complete file. Never drop, merge, reorder or add keys, apart from the Android
translatable="false"exception above. - The file must stay syntactically valid in its format.
- Do not "improve" the source text. If the source has an error, translate what was meant and flag it.
- If the catalog is not a recognisable string catalog, or is not a valid locale, say so and stop.
Translated catalog
The full translated file in one code block, in the original format.
Review notes
| Key | Type (ambiguous / length / glossary / plural change / register / source issue) | Note and alternative | "None" if there are no notes.
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
- 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 translate-string-catalog --target claude-codenpx skills add hermes-hq/hodios-dist --skill translate-string-catalog -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)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.
review-translated-stringsBuild 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