@scoutello/i18n-magic
v0.57.0
Published
Intelligent CLI toolkit that automates internationalization workflows with AI-powered translations for JavaScript/TypeScript projects
Maintainers
Readme
i18n Magic ✨
The intelligent CLI toolkit that automates your internationalization workflow with AI-powered translations.
Stop context switching. Let AI handle your translations while you stay in your code editor.
🚀 What it does
- 🔍 Smart Detection: Automatically scans your codebase to find translation keys
- 🤖 AI Translation: Generates high-quality translations using OpenAI or Gemini models
- 🔄 Sync & Maintain: Keeps all your locales in perfect sync
- 🧹 Clean & Optimize: Removes unused translations and creates optimized bundles
- ⚡ CI/CD Ready: Perfect for automated workflows and deployment pipelines
- 🔌 MCP Integration: Connect with Cursor and other LLMs to add translation keys on the fly
📋 Requirements
- JSON-based i18n libraries (react-i18next, next-i18next, vue-i18n, etc.)
- Node.js 16+
- An OpenAI or Google Gemini API key
Why This Matters
Traditional workflow: 40+ minutes and 13 context switches to add 10 keys across 4 languages.
With i18n-magic + AI agents: 2.5 minutes, zero context switches. Stay in flow.
CLI Commands
npx @scoutello/i18n-magic scan # Find & add missing translations
npx @scoutello/i18n-magic sync # Translate to all languages
npx @scoutello/i18n-magic replace [key] # Update existing translation
npx @scoutello/i18n-magic clean # Remove unused keys
npx @scoutello/i18n-magic check-missing # CI/CD validationscan - Scans your codebase for missing keys, prompts you for values, auto-translates to all locales.
sync - Takes your default locale translations and translates missing keys to other locales. Perfect for CI/CD.
replace - Update an existing translation key across all locales. Detects which namespaces use the key automatically.
clean - Removes unused translation keys from all locales. Great for keeping files lean.
check-missing - Dry-run check. Exits with error code if translations are missing. Perfect for CI pipelines.
Namespace Organization (for large apps)
// i18n-magic.js
globPatterns: [
'./src/shared/**/*.tsx', // → common.json
{ pattern: './src/dashboard/**/*.tsx', namespaces: ['dashboard'] },
{ pattern: './src/mobile/**/*.tsx', namespaces: ['mobile'] }
]Result: Separate files per feature (common.json, dashboard.json, mobile.json) across all locales.
The MCP Server: AI Superpowers
MCP (Model Context Protocol) = API for AI agents.
Install the i18n-magic MCP server in Cursor, and your AI gets 5 new tools:
1. search_translations - Prevent Duplicates
Fuzzy search across all translations. AI searches before adding anything.
2. add_translation_key - Add New Keys
Adds key to English (en) locale. Run sync afterward to translate to other languages.
3. get_translation_key - Check What Exists
Retrieve current value for any key.
4. update_translation_key - Fix & Auto-Translate
Update a key and instantly translate to all languages. No sync needed!
5. list_untranslated_keys - Batch Check
Show all missing keys across your codebase.
Quick Setup (5 Minutes)
1. Install
npm install @scoutello/i18n-magic2. Create i18n-magic.js in project root
module.exports = {
globPatterns: ['./src/**/*.{ts,tsx,js,jsx}'],
loadPath: 'locales/{{lng}}/{{ns}}.json',
savePath: 'locales/{{lng}}/{{ns}}.json',
locales: ['en', 'de', 'es', 'fr'],
defaultLocale: 'en',
namespaces: ['common'],
defaultNamespace: 'common',
context: 'Your app description here',
model: 'gpt-4o-mini', // or 'gemini-2.0-flash-lite'
// Optional: Auto-clean before scanning
autoClear: true,
// Optional: Skip translation during scan (translate later with sync)
disableTranslationDuringScan: false,
}Key options:
context: Describe your app/domain. Better context = better translations.autoClear: Auto-remove unused keys before scanning.disableTranslationDuringScan: Settrueto only add English during scan, then usesynccommand for translations.
3. Add API key to .env
OPENAI_API_KEY=sk-your-key-here4. Configure MCP in Cursor
Settings → Features → Model Context Protocol:
{
"i18n-magic": {
"command": "node",
"args": ["./node_modules/@scoutello/i18n-magic/dist/mcp-server.js"]
}
}5. Restart Cursor
Done! Test by asking: "Search for translations with 'password'"
How to Use It
Pattern 1: Adding Translations (Search First!)
You: "Add a submit button"
AI:
- Searches existing translations for "submit"
- Finds
submitButton: "Submit"already exists - Suggests reusing it
- Generates:
<Button>{t('submitButton')}</Button>
Result: No duplicate keys, instant code.
If nothing exists:
- AI adds key to English:
add_translation_key - You run:
npx @scoutello/i18n-magic sync - Translated to all languages!
Pattern 2: Updating Translations
You: "Change welcome message to 'Welcome back!'"
AI:
- Finds the key via search
- Calls
update_translation_key - Auto-translates to ALL languages instantly
No sync needed!
Pattern 3: Batch Check
You: "What translations are missing?"
AI: Calls list_untranslated_keys, shows you the list.
Add them now or during development. Your choice.
Real Example
Building a UserProfile component:
You: "Replace 'User Profile' with translation"
AI:
- Searches for "user profile"
- Nothing found
- Adds:
profile.title: "User Profile"to en/dashboard.json - Updates code:
<h1>{t('profile.title')}</h1>
You: "Add translations for labels"
AI:
- Searches "email" → finds
emailLabelin common - Reuses existing key (no duplicate!)
- Searches "full name" → nothing found
- Adds new:
profile.fullNameLabel: "Full Name"
You run:
npx @scoutello/i18n-magic syncResult: All keys now in EN, DE, ES, FR. Took 2 minutes.
Later: "Change title to 'Your Profile'"
AI: Calls update_translation_key → instantly updated in all 4 languages. No sync needed!
Pro Tips
Better Translations with Context
// Generic → Okay
context: 'Web application'
// Specific → Much better!
context: 'E-commerce for outdoor gear. Friendly tone. Target: adventurers.'More context = better AI translations.
CI/CD: Auto-translate on PR
# .github/workflows/auto-translate.yml
on:
pull_request:
paths: ['locales/en/**/*.json']
jobs:
translate:
steps:
- run: npx @scoutello/i18n-magic sync
- run: git commit -am "chore: auto-translate"English changes → auto-translated → committed. Zero manual work.
Namespace Strategy
- <100 keys: Single
common.json - 100-500 keys: Split by feature (
auth,dashboard) - 500+ keys: Feature-based with auto-assignment (see setup section)
Custom Storage Solutions
Store translations anywhere (S3, databases, CDNs):
// Example: S3 storage
const { S3Client, GetObjectCommand, PutObjectCommand } = require('@aws-sdk/client-s3')
const s3Client = new S3Client({
region: process.env.S3_REGION,
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY,
secretAccessKey: process.env.S3_SECRET_KEY,
}
})
module.exports = {
loadPath: async (locale, namespace) => {
const response = await s3Client.send(
new GetObjectCommand({
Bucket: 'my-translations-bucket',
Key: `locales/${locale}/${namespace}.json`,
})
)
const data = await response.Body.transformToString()
return JSON.parse(data)
},
savePath: async (locale, namespace, data) => {
await s3Client.send(
new PutObjectCommand({
Bucket: 'my-translations-bucket',
Key: `locales/${locale}/${namespace}.json`,
Body: JSON.stringify(data, null, 2),
ContentType: 'application/json',
})
)
},
// ... other config
}Troubleshooting
MCP Connection Error
Error: MCP error -32000: Connection closed
Fix: Use auto-detection (no cwd needed):
{
"i18n-magic": {
"command": "node",
"args": ["./node_modules/@scoutello/i18n-magic/dist/mcp-server.js"]
}
}Still broken? Check i18n-magic.js exists in project root:
ls -la i18n-magic.jsTranslations Not Working
Problem: Keys added but not translated.
Fix: Run sync!
npx @scoutello/i18n-magic syncadd_translation_key only adds English. sync translates to other languages.
MCP Tools Not Appearing
- Restart Cursor after adding MCP config
- Check Settings → Features → MCP shows "i18n-magic" as Connected
- Test: Ask AI to "search translations for 'password'"
Get Started Now
npm install @scoutello/i18n-magic- Create
i18n-magic.jsconfig (see setup section) - Add
OPENAI_API_KEYto.env - Configure MCP in Cursor
- Start coding. AI handles translations.
5 minutes to set up. Hours saved every week.
Links
- MCP Details: MCP-SERVER.md
- Example App: example-app/
- GitHub: github.com/BjoernRave/i18n-magic
- NPM: @scoutello/i18n-magic
Never context switch for translations again. 🌍
