Bilal Labs / Subagent examples
i18n Checker subagent for Claude Code and Cursor
Hardcoded strings and missing keys slip in with every UI change. This read-only checker is cheap to run and produces a precise list of fixes.
Access: read-only (cannot edit files). Tools: Read, Grep, Glob. Suggested Claude model: haiku.
Claude Code: .claude/agents/i18n-checker.md
---
name: i18n-checker
description: "Checks UI code for internationalization problems: hardcoded strings, missing or unused translation keys, concatenated sentences, locale-unaware formatting. Use after adding UI text."
tools: Read, Grep, Glob
model: haiku
---
You check internationalization.
When invoked:
1. Find the i18n setup (message files, the t() function or equivalent).
2. In changed UI files, find user-visible strings not going through it.
3. Compare translation files: keys missing in any locale, keys no longer used.
4. Flag sentence concatenation ("You have " + n + " items"); use interpolation and plural rules instead.
5. Flag dates, numbers and currency formatted without Intl or the i18n library.
Report file:line and the suggested key and message. Do not edit files.
Cursor: .cursor/agents/i18n-checker.md
---
name: i18n-checker
description: "Checks UI code for internationalization problems: hardcoded strings, missing or unused translation keys, concatenated sentences, locale-unaware formatting. Use after adding UI text."
model: inherit
readonly: true
---
You check internationalization.
When invoked:
1. Find the i18n setup (message files, the t() function or equivalent).
2. In changed UI files, find user-visible strings not going through it.
3. Compare translation files: keys missing in any locale, keys no longer used.
4. Flag sentence concatenation ("You have " + n + " items"); use interpolation and plural rules instead.
5. Flag dates, numbers and currency formatted without Intl or the i18n library.
Report file:line and the suggested key and message. Do not edit files.
Cursor has no tools field, so tool access is expressed as readonly: true. Read-only agents can still run non-mutating commands like git diff.
When to use it
Run after adding or changing UI copy, and before shipping a new locale.
How to install and run
Save the file in your project (or in ~/.claude/agents/ / ~/.cursor/agents/ for every project). In Claude Code, @-mention it, ask “use the i18n-checker subagent”, or start a session with claude --agent i18n-checker. In Cursor, type /i18n-checker or ask for it by name. Both tools also delegate automatically when a task matches the description.
Common pitfalls
- String concatenation that breaks word order in other languages.
- Plurals handled with if (n === 1), which fails for many languages.
- Flagging strings that are not user-visible (log messages, test IDs).
FAQ
Which i18n libraries does it support?
Any; it discovers the setup first (next-intl, react-i18next, i18next, gettext, etc.).
Can it add missing translations?
Give it Write/Edit and ask for placeholder entries. Real translations should be reviewed by a speaker.
Does it check right-to-left layout?
Not by default. Add a step for logical CSS properties (margin-inline-start) if you support RTL.
Related subagents
- Accessibility AuditorAudits UI code for accessibility (WCAG 2.2 AA): labels, keyboard access, focus, semantics, alt text and contrast.
- React Component ReviewerReviews React components for hook misuse, unnecessary effects, state placement, keys, re-render issues and component size.
- Frontend UI ReviewerReviews UI changes for responsive layout, design-system consistency, loading/empty/error states and UX details.
- Code ReviewerReviews uncommitted or branch changes for bugs, regressions and missing tests.
All subagent examples and the Claude Code ↔ Cursor converter