From i18n-audit
Internationalization completeness audit and key synchronization. Finds missing translation keys, hardcoded strings, pluralization bugs, RTL layout issues, date/number formatting gaps, and untranslated copy. Supports i18next, react-intl, vue-i18n, next-intl, and custom JSON locale files. Use when adding a new language, auditing translation completeness, or debugging locale mismatch errors.
How this skill is triggered — by the user, by Claude, or both
Slash command
/i18n-audit:i18n-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Find every missing translation, hardcoded string, and locale gap before your users do.
Find every missing translation, hardcoded string, and locale gap before your users do.
/i18n-audit — full audit across all locales
/i18n-audit --lang pt-BR — audit single locale
/i18n-audit --missing — show only missing keys
/i18n-audit --hardcoded — scan codebase for hardcoded strings
/i18n-audit --fix — add placeholder keys for missing translations
/i18n-audit --new-lang es — scaffold a new language from base locale
en) but missing in target localesone / other / few / many / zero){name} in key but {user} in code)new Date().toLocaleDateString() without locale paramdir="rtl" for Arabic / Hebrew locales$ currency symbolsMM/DD/YYYY)Intl.NumberFormat / Intl.DateTimeFormat locale paramsi18n AUDIT REPORT — 2026-06-14
================================
Base locale: en | Target locales: pt-BR, es, fr, de, ja
COMPLETENESS
pt-BR 96/100 ✅ 8 missing keys
es 88/100 ⚠️ 24 missing keys
fr 71/100 ❌ 58 missing keys (stale, needs attention)
de 100/100 ✅ complete
ja 45/100 ❌ 110 missing keys
MISSING KEYS (es)
checkout.summary.discount_label
checkout.summary.free_shipping
profile.settings.notification_email
... (21 more)
HARDCODED STRINGS DETECTED
src/components/Header.tsx:14 → "Welcome back, "
src/pages/checkout.tsx:87 → "Free shipping on orders over $50"
src/utils/date.ts:23 → new Date().toLocaleDateString() ← no locale
PLURAL ISSUES
pt-BR → cart.items_count: missing 'other' form
es → notification.unread: uses 'plural' (nonstandard), should be 'other'
ORPHANED KEYS (in pt-BR but not in en — likely stale)
auth.login_with_facebook ← Facebook login removed 3 months ago
checkout.cod_payment ← COD feature removed
{
"cart": {
"items_count_one": "{{count}} item",
"items_count_other": "{{count}} items"
}
}
// ❌
`$${price.toFixed(2)}`
// ✅
new Intl.NumberFormat(locale, {
style: 'currency',
currency: currencyCode,
}).format(price)
// ❌
new Date(ts).toLocaleDateString()
// ✅
new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(new Date(ts))
// globals.css
[dir="rtl"] .card-icon { transform: scaleX(-1); }
// layout
<html lang={locale} dir={rtlLocales.includes(locale) ? 'rtl' : 'ltr'}>
Running /i18n-audit --new-lang es will:
[NEEDS TRANSLATION] Original: ...Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub andersonlimahw/lemon-ai-hub --plugin i18n-audit