{"slug": "show-hn-internationalizationstack-fix-ai-localization-bugs-in-claude-code", "title": "Show HN: Internationalizationstack – Fix AI Localization Bugs in Claude Code", "summary": "Developer i18n-agent released i18nstack, an open-source toolset that turns Anthropic's Claude Code into a localization team with CLI tools, slash commands, and 46 language-specific translation skills. The project aims to fix AI localization bugs by providing format conversion, pseudo-translation, validation, and native-quality translations for software internationalization.", "body_md": "**i18nstack turns Claude Code into a full localization team: format engineer, QA tester, release gate, and 46 native-quality translators.**\n\nThree battle-tested CLI tools, five workflow slash commands, and 46 language-specific translation skills for [Claude Code](https://docs.anthropic.com/en/docs/claude-code), installed with one command.\n\n```\ngit clone --depth 1 https://github.com/i18n-agent/i18nstack.git ~/.claude/skills/i18nstack && ~/.claude/skills/i18nstack/setup\n```\n\nThat's it. The setup script installs the CLI tools (npm, with Homebrew fallback) and registers every skill with Claude Code.\n\n| Tool | Role | What it does |\n|---|---|---|\n`i18n-convert` |\n\n`i18n-pseudo`\n\n`i18n-validate`\n\n| Command | What it does |\n|---|---|\n`/i18n-wrap [path] [--framework=...]` |\nScan code for hardcoded user-facing strings and wrap them with the right i18n function (next-intl, react-i18next, vue-i18n, angular, svelte, python, ruby, flutter, ios, android). Updates locale files and validates. |\n`/i18n-review [path] [--framework=...]` |\nRead-only audit of existing i18n wrapping: over/under-wrapping, split sentences, hardcoded values, quality issues. |\n`/i18n-validate [path]` |\nRun validation and FIX every finding — placeholder drift, plural forms, missing keys (translated properly, never English filler) — looping until it passes. |\n`/i18n-convert <file> --to <format>` |\nSafe conversion workflow: resolve the format slug, dry-run for data-loss warnings, convert, verify key counts round-trip. |\n`/i18n-pseudo <files> [--preset=...]` |\nGenerate pseudo locales, wire them into the app as a test locale, and hunt down the hardcoded strings and layout bugs they expose. |\n\nEach `localize-XX`\n\nskill is distilled from production translation prompts and enforces native-writer rules: formality registers, particle selection, plural systems, script conventions, and false-friend avoidance.\n\nArabic (ar), Bulgarian (bg), Bengali (bn), Catalan (ca), Czech (cs), Welsh (cy), Danish (da), German (de), Greek (el), Spanish (es), Estonian (et), Persian (fa), Finnish (fi), French (fr), Irish (ga), Hebrew (he), Hindi (hi), Croatian (hr), Hungarian (hu), Indonesian (id), Icelandic (is), Italian (it), Japanese (ja), Korean (ko), Lithuanian (lt), Latvian (lv), Malay (ms), Maltese (mt), Dutch (nl), Norwegian (no), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Slovak (sk), Slovenian (sl), Serbian (sr), Swedish (sv), Swahili (sw), Thai (th), Tagalog (tl), Turkish (tr), Ukrainian (uk), Urdu (ur), Vietnamese (vi), Chinese (zh)\n\nThe repo lives at `~/.claude/skills/i18nstack`\n\n. Setup symlinks each skill directory into `~/.claude/skills/`\n\n, so Claude Code discovers them automatically and a single `git pull`\n\nupdates everything.\n\n```\n~/.claude/skills/\n├── i18nstack/          ← this repo\n├── i18n-convert  →  i18nstack/i18n-convert\n├── i18n-pseudo   →  i18nstack/i18n-pseudo\n├── i18n-validate →  i18nstack/i18n-validate\n├── localize-ja   →  i18nstack/localize-ja\n└── ... (46 localize skills)\n\n~/.claude/commands/\n├── i18n-wrap.md     →  ../skills/i18nstack/commands/i18n-wrap.md\n├── i18n-review.md   →  ../skills/i18nstack/commands/i18n-review.md\n├── i18n-validate.md →  ../skills/i18nstack/commands/i18n-validate.md\n├── i18n-convert.md  →  ../skills/i18nstack/commands/i18n-convert.md\n└── i18n-pseudo.md   →  ../skills/i18nstack/commands/i18n-pseudo.md\n```\n\nShip a new locale end to end:\n\n**Convert** your source file into whatever format the project needs:\n\n```\ni18n-convert en.json --to android-xml -o strings.xml\n```\n\n**Pseudo-translate** to prove every string goes through the i18n layer:Load it as a fake locale, screenshot the app: un-bracketed English = hardcoded string.\n\n```\ni18n-pseudo en.json --preset layout -o pseudo/\n```\n\n**Translate** with Claude Code using the matching skill: \"translate messages/en.json to Japanese\" triggers`localize-ja`\n\nand its native-writer rules.**Validate** before shipping:\n\n```\ni18n-validate ./locales --strict\ncd ~/.claude/skills/i18nstack && git pull && ./setup\ncd ~/.claude/skills && find . -maxdepth 1 -type l -lname 'i18nstack/*' -delete && rm -rf i18nstack\ncd ~/.claude/commands && find . -maxdepth 1 -type l -lname '*skills/i18nstack/*' -delete\n```\n\nCLI tools: `npm uninstall -g @i18n-agent/i18n-convert @i18n-agent/i18n-pseudo @i18n-agent/i18n-validate`\n\n[Claude Code](https://docs.anthropic.com/en/docs/claude-code)- Node.js/npm (or Homebrew) for the CLI tools\n\nMIT", "url": "https://wpnews.pro/news/show-hn-internationalizationstack-fix-ai-localization-bugs-in-claude-code", "canonical_source": "https://github.com/i18n-agent/i18nstack", "published_at": "2026-07-09 10:19:40+00:00", "updated_at": "2026-07-09 10:43:02.266829+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "large-language-models", "ai-tools"], "entities": ["i18nstack", "Claude Code", "Anthropic", "i18n-agent"], "alternates": {"html": "https://wpnews.pro/news/show-hn-internationalizationstack-fix-ai-localization-bugs-in-claude-code", "markdown": "https://wpnews.pro/news/show-hn-internationalizationstack-fix-ai-localization-bugs-in-claude-code.md", "text": "https://wpnews.pro/news/show-hn-internationalizationstack-fix-ai-localization-bugs-in-claude-code.txt", "jsonld": "https://wpnews.pro/news/show-hn-internationalizationstack-fix-ai-localization-bugs-in-claude-code.jsonld"}}