hermes

Review 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.

context

Internationalisation bugs hide until the first non-English locale ships. Then a Polish user reads "5 plik" because the code assumed one-or-many plurals, a German button overflows, a Turkish user cannot log in because "I".toLowerCase() is not "ı", an Arabic layout is mirrored everywhere except the margins, a Japanese price shows two decimals, and a date reads 03/04 to someone who expects 4 March. The review must find these in the code before translators start, and show the exact input that breaks.

task

Review this code for internationalisation readiness:

Target locales: (if empty, use German, Japanese, Arabic, Polish, Turkish and Hindi as stress cases).

Check each category below. For every finding, construct the locale and input that breaks it.

  1. Strings: hard-coded user-facing text; concatenation or interpolation that fixes word order; sentence fragments assembled in code; one key reused in different contexts; text baked into images or SVGs.
  2. Plurals and gender: count === 1 ternaries, + "s", and any logic that assumes two forms; messages that assume a grammatical gender.
  3. Dates and times: fixed format strings, toString() or formatting without an explicit locale, assuming the week starts on Sunday or Monday, the 12- versus 24-hour clock, time zone handling (store UTC, display in the user's zone), and non-Gregorian calendars if the targets need them.
  4. Numbers and currency: toFixed, hand-made thousands separators, a hard-coded currency symbol or position, currency minor units (JPY has 0, KWD has 3), floats for money, and parsing user input as if it were always 1,234.56.
  5. Text handling: case mapping without a locale (Turkish dotted and dotless i), length or slicing that splits surrogate pairs or grapheme clusters (emoji, Indic scripts), byte-based truncation, sorting without a collator, and search that ignores accents or normalisation (NFC versus NFD).
  6. Layout: fixed widths or heights on text containers (German and Finnish run 30 to 40 percent longer, and short labels can double), truncation without a tooltip, and fonts or line-height that clip scripts with tall glyphs.
  7. Direction (if any target is right-to-left): physical CSS properties (margin-left, left, text-align: left), directional icons, missing dir and lang attributes, and user content not isolated with dir="auto" or bdi.
  8. Locale plumbing: how the locale is chosen, the fallback chain, lang on the document, server-rendered and email text, and locale-sensitive validation (postal codes, phone numbers, names split into first and last).
constraints
  • Report only real defects in the given code, each with file and line and the breaking example. Do not list general advice the code already follows.
  • Rank by user impact: wrong data or blocked flows (wrong money amount, failed login, corrupted text) first, then unreadable or broken UI, then polish.
  • At most 15 findings. If one cause repeats, report it once and list every location.
  • Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
  • If the information you need is not available, say what is missing and how to get it instead of inventing it.
output format

Summary

Two or three sentences: readiness for the target locales, and the top blockers.

Findings

Numbered, highest impact first. Each:

  • path:line: the problem
  • Breaks in: the locale and input, with the wrong output it produces
  • Fix: the code change, using the platform's locale-aware API (for example Intl.NumberFormat, Intl.PluralRules, Intl.Collator, ICU MessageFormat, or the platform formatter)

Looks fine

Categories checked with no issues, in one line.

1 required value still a placeholder; the assistant will ask for it.

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, Tech lead / staff engineer
needs
repo-read
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

Edit on GitHubReport a problem

use in

Hodios CLI
npx @hermes-hq/hodios install review-i18n-readiness --target claude-code
Agent Skills
npx skills add hermes-hq/hodios-dist --skill review-i18n-readiness -a claude-code
Add the Hodios marketplace (once)
claude plugin marketplace add hermes-hq/hodios-dist
Install the software-engineering plugin
claude plugin install hodios-software-engineering@hodios

The plugin brings every entry in this domain at once.

PromptLocalization (software)

Extract 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-strings
PromptLocalization (software)

Plan 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-support
PromptLocalization (software)

Write 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
PromptLocalization (software)

Build 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-glossary
PromptLocalization (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-strings
PromptLocalization (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-catalog