i18n-wrap
Installation
SKILL.md
i18n-wrap: $ARGUMENTS
DECISION RULE
If even ONE target language needs a different string, it MUST be wrapped. When uncertain: wrap it. Over-wrapping = minor annoyance. Under-wrapping = broken UX.
ANTI-PATTERNS (never do these)
- NEVER split sentences across keys (
t('greeting') + name-- word order varies) - NEVER wrap technical constants (API, PDF, USD, regex, CSS classes, env vars, console.log)
- NEVER guess framework -- ask user if ambiguous
- NEVER delete existing translations or overwrite them
- NEVER use
defaultValuein t() calls - NEVER transform t() output (
.toLowerCase(),.toUpperCase(),.trim(), template casing) -- case rules differ by language (e.g. Turkish İ/i, German ß→SS); create a separate key instead - NEVER interpolate count outside t() (
{n} {t('label')}) -- bypasses plural handling ("1 languages"); use single key with ICU plurals:t('label_count', {count: n})