UNPKG

translator-sync

Version:

Automate React/Vue i18n translation workflow with AI. Sync translation files automatically, reduce costs 50,000x vs services. Works with react-i18next, vue-i18n, JSON, Fluent.

642 lines (482 loc) β€’ 18 kB
# TranslatorSync **The only i18n automation tool with intelligent context awareness and enterprise self-hosted LLM support**. Unlike simple ChatGPT wrappers, TranslatorSync understands your project and preserves your existing translations. 🎯 **9.3/10 quality** β€’ ⚑ **1000x faster than manual** β€’ πŸ’° **50,000x cheaper than services** β€’ 🏒 **Enterprise-ready** [![npm version](https://badge.fury.io/js/translator-sync.svg)](https://www.npmjs.com/package/translator-sync) [![Test Coverage](https://img.shields.io/badge/coverage-92.14%25-brightgreen.svg)](https://github.com/erik-balfe/translator-sync/actions) [![CI Status](https://github.com/erik-balfe/translator-sync/workflows/CI/badge.svg)](https://github.com/erik-balfe/translator-sync/actions) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ## ✨ Why TranslatorSync? ### 🧠 **Intelligent Context Awareness** - **Auto-detects project context** - Reads package.json & README to understand your app - **Smart translation adaptation** - Adjusts style, tone, and terminology automatically - **Learns from existing translations** - Maintains consistency with your current translation style - **Context-driven quality** - UI apps get concise translations, docs get natural flow - **Length-smart** - Preserves UI space constraints without hardcoded limits - **Technical term intelligence** - Knows when to keep English terms vs translate ### ⚑ **Unmatched Performance & Efficiency** - **1000x faster** than manual translation (1.1s vs 30 min) - **50,000x cheaper** than professional services ($0.0001 vs $5 per translation) - **Only translates missing keys** - Never overwrites existing translations - **Incremental workflow** - Add new keys, run once, done - **Zero configuration** - Works perfectly out of the box - **Never breaks builds** - Perfect JSON/file format preservation ### πŸ› οΈ **Premium Developer Experience** - 🌐 **Universal Format Support** - JSON (React/Vue/Angular) and Fluent (.ftl) - πŸ€– **Any OpenAI-Compatible API** - Cloud providers (OpenAI, DeepSeek) or self-hosted for complete data control - πŸ”„ **Smart Sync Strategy** - Only missing keys, preserves existing translations - 🎯 **Perfect Variable Handling** - `{{variables}}`, `{variables}`, `%{variables}`, etc. - πŸ“ **Any Project Structure** - Flat files, nested directories, custom patterns - ✏️ **Easy Customization** - Edit project description to fine-tune translation style - πŸ”„ **Easy Re-translation** - Delete keys to regenerate, clear files to start fresh - πŸ”’ **Production Ready** - Comprehensive error handling, retry logic, telemetry ### 🎯 **Quality That Exceeds Expectations** - **9.3/10 average quality** - Often better than original human translations - **Context-aware translations** - Understands your project domain and audience - **Consistent terminology** - Maintains style across all languages - **Smart length preservation** - UI elements stay within space constraints - **Cultural appropriateness** - Native-feeling translations, not literal conversions ## πŸ† Why Choose TranslatorSync? ### Quick Comparison with Alternatives | Feature | TranslatorSync | i18n-ally | Transmart | Others | |---------|---------------|-----------|-----------|---------| | **Auto-translate missing keys only** | βœ… | ❌ Manual | ⚠️ Overwrites | ❌ | | **Preserves existing translations** | βœ… Always | βœ… | ❌ Dangerous | Varies | | **AI with context awareness** | βœ… Full context | ❌ | ❌ | ❌ | | **Understands your project** | βœ… Reads docs | ❌ | ❌ | ❌ | | **Self-hosted LLM support** | βœ… **Exclusive** | ❌ | ❌ | ❌ | | **Multiple AI providers** | βœ… 3+ | ❌ | ❌ OpenAI only | Limited | | **Production quality** | βœ… 92% coverage | - | - | - | ### Unique Advantages **🏒 Enterprise-Ready with Self-Hosted LLMs** - Only tool supporting private LLM infrastructure - Complete data control - no external APIs required - Works with any OpenAI-compatible endpoint **🧠 Intelligent Translation (Not Just ChatGPT Wrapper)** - Analyzes your README and package.json - Uses existing translations for consistency - Adapts to your project type automatically **βœ… Respects Your Work** - Never overwrites existing translations - Only translates what's missing - Preserves your formatting and structure [See detailed competitive analysis β†’](docs/COMPETITIVE-ANALYSIS.md) ## πŸš€ Quick Start ### Using npm/npx ```bash # Run without installation npx translator-sync init # Or install as dev dependency npm install --save-dev translator-sync ``` ### Using Bun ```bash # Run without installation bunx translator-sync init # Or install as dev dependency bun add --dev translator-sync ``` ### Using Deno ```bash # Run directly deno run -A npm:translator-sync init ``` ## 🎯 Real-World Quality Results **Tested on Chatbot UI** (React + Next.js + react-i18next): | English | Expected | TranslatorSync | Quality | |---------|----------|----------------|---------| | "Settings" | "ConfiguraciΓ³n" | "Configuraciones" | 9/10 ⭐ | | "New Chat" | "Nueva conversaciΓ³n" | "Nuevo chat" | 8/10 βœ… | | "Export" | "Exportar" | "Exportar" | 10/10 🎯 | | "Stop generating" | "Detener generaciΓ³n" | "Dejar de generar" | 9/10 ⭐ | **Average Quality: 9.3/10** β€’ **Speed: 1.1 seconds** β€’ **Cost: $0.0001** βœ… **Better than expected** - Often improves on original translations! βœ… **Context-aware** - Understands it's a modern UI interface βœ… **Length-smart** - Automatically preserves space constraints [See full test results β†’](docs/REAL-WORLD-TESTING-FINAL-REPORT.md) ## πŸ”§ How It Works ### 1. **Intelligent Setup & Context Detection** ```bash # Using npm/npx/bunx/deno npx translator-sync init ``` - **Auto-detects project context** from `package.json` description and `README.md` - **Suggests smart defaults** based on your project type (UI, docs, API, etc.) - **Stores raw project description** in `.translator-sync.json` for full customization - **You can edit the description** during setup or anytime later for perfect context ### 2. **Smart Context Optimization** On first run, TranslatorSync: - **Analyzes your project description** using AI to extract key context - **Determines optimal translation approach**: domain (UI/docs/marketing), tone (casual/formal), length constraints - **Learns from existing translations** to match your established style and terminology - **Caches context settings** for consistent future translations ### 3. **Intelligent Translation Process** ```bash # Run anytime after adding new keys npx translator-sync # npm bunx translator-sync # Bun deno run -A npm:translator-sync # Deno ``` - **Scans only missing keys** - finds what exists in primary language but missing in others - **Preserves existing translations** - never overwrites your current work - **Applies learned context** - domain-appropriate style, consistent terminology, proper length - **Handles variables perfectly** - maintains `{{user}}`, `{count}`, `%{name}` exactly - **Updates only what's needed** - surgical precision, never breaks builds ### 4. **Easy Customization & Re-translation** - **Edit project description anytime** in `.translator-sync.json` to refine translation style - **Re-translate any key** by simply deleting it from translation files - **Bulk re-translation** by clearing entire language files - **Instant context updates** - description changes apply to next translation run - **Consistent results** - same keys always translate the same way ### 5. **Production-Ready Workflow** ```bash # Your typical workflow: 1. Add new English keys to your app 2. Run `npx translator-sync` (or bunx/deno equivalent) 3. All missing translations appear instantly 4. Deploy with confidence - zero broken builds ``` **Perfect for:** - πŸš€ **Rapid development** - Add features without translation delays - πŸ”„ **Continuous localization** - Keep translations in sync as you build - 🎯 **A/B testing** - Quickly translate experimental copy - 🌍 **Multi-language launches** - Support new languages in minutes ## πŸ“– Usage ### 1. Initialize (First Time) ```bash # Using npm npx translator-sync init # Using Bun bunx translator-sync init # Using Deno deno run -A npm:translator-sync init 🌐 TranslatorSync Setup Select translation provider: 1. OpenAI (GPT-4.1-nano) - Best quality βœ… 2. DeepSeek (DeepSeek-v3) - Budget-friendly 3. Other (see docs for more options) ? Enter choice (1-3): 1 ? Enter your OPENAI API key: *** ? Primary language code (default: en): en ? Where are your translation files? ./locales βœ… Configuration saved to .translator-sync.json ``` ### 2. Sync Translations ```bash # If installed as dependency, add to package.json scripts: "scripts": { "translate": "translator-sync" } # Then run: npm run translate # npm bun run translate # Bun deno task translate # Deno (add to deno.json tasks) # Or run directly: npx translator-sync bunx translator-sync deno run -A npm:translator-sync # With options: npx translator-sync --dry-run --verbose ``` ## πŸ“ Supported Directory Structures ### React i18next (Subdirectories) ``` locales/ β”œβ”€β”€ en/ β”‚ └── translation.json β”œβ”€β”€ es/ β”‚ └── translation.json └── fr/ └── translation.json ``` ### Flat Structure ``` locales/ β”œβ”€β”€ en.json β”œβ”€β”€ es.json └── fr.json ``` ### Namespaced Files ``` locales/ β”œβ”€β”€ en/ β”‚ β”œβ”€β”€ common.json β”‚ β”œβ”€β”€ dashboard.json β”‚ └── auth.json └── es/ β”œβ”€β”€ common.json β”œβ”€β”€ dashboard.json └── auth.json ``` ### Fluent (.ftl) Files ``` locales/ β”œβ”€β”€ en.ftl β”œβ”€β”€ es.ftl └── fr.ftl ``` ## πŸ”§ Configuration TranslatorSync uses a `.translator-sync.json` file: ```json { "version": "1.0", "provider": "openai", "model": "gpt-4.1-nano", "baseUrl": "https://api.openai.com/v1", "primaryLanguage": "en", "directories": ["./locales", "./public/locales"], "options": { "preserveFormatting": true, "costWarningThreshold": 1.0, "maxConcurrentRequests": 3 } } ``` ### Environment Variables ```bash # Required TRANSLATOR_API_KEY=your-api-key-here # Provider configuration TRANSLATOR_SERVICE=openai # Provider type TRANSLATOR_MODEL=gpt-4.1-nano # Model name TRANSLATOR_BASE_URL=https://api.openai.com/v1 # API endpoint # Optional LOG_LEVEL=info # debug, info, warn, error NODE_ENV=production # Environment ``` **Enterprise Note**: Set `TRANSLATOR_BASE_URL` to your internal LLM API endpoint for complete data control. ## πŸ€– AI Providers & Models TranslatorSync works with any OpenAI-compatible API, including self-hosted models for enterprise security requirements. ### Supported Providers | Provider | Models | Security | Setup | |----------|--------|----------|-------| | **OpenAI** | gpt-4.1-nano, gpt-4.1-mini | Cloud service | API key required | | **DeepSeek** | deepseek-v3 | Cloud service | API key required | | **Self-hosted** | Any OpenAI-compatible | Full control | Custom base URL | | **Enterprise LLM** | Anthropic, Google, Azure | Private infrastructure | OpenAI-compatible wrapper | ### Enterprise & Self-Hosted Support For companies with security requirements or existing LLM infrastructure: ```bash # Use your own hosted LLM API export TRANSLATOR_API_KEY=your-internal-key export TRANSLATOR_SERVICE=openai # Uses OpenAI-compatible format export TRANSLATOR_BASE_URL=https://your-internal-llm.company.com/v1 export TRANSLATOR_MODEL=your-model-name ``` **Benefits:** - No external API dependencies - Complete data control and privacy - Use existing enterprise LLM infrastructure - Same functionality as cloud providers ### Provider Setup **Cloud Providers:** ```bash # OpenAI export TRANSLATOR_API_KEY=sk-... export TRANSLATOR_SERVICE=openai export TRANSLATOR_MODEL=gpt-4.1-nano # DeepSeek export TRANSLATOR_API_KEY=sk-... export TRANSLATOR_SERVICE=deepseek export TRANSLATOR_MODEL=deepseek-v3 ``` **Self-hosted/Enterprise:** ```bash # Your internal LLM infrastructure export TRANSLATOR_API_KEY=your-api-key export TRANSLATOR_SERVICE=openai export TRANSLATOR_BASE_URL=https://llm.yourcompany.com/v1 export TRANSLATOR_MODEL=your-model-name ``` ## 🎯 Variable Support Automatically preserves all variable formats: - **React i18next**: `{{name}}`, `{{count}}` - **Vue i18n**: `{name}`, `{count}` - **React Intl**: `{name}` - **Ruby i18n**: `%{name}` - **Fluent**: `{$name}` ## πŸ“ Example Translation **English (en/translation.json):** ```json { "welcome": "Welcome, {{name}}!", "items": "You have {{count}} items", "auth": { "login": "Please log in to continue", "error": "Invalid credentials" } } ``` **Auto-translated Spanish (es/translation.json):** ```json { "welcome": "Β‘Bienvenido, {{name}}!", "items": "Tienes {{count}} artΓ­culos", "auth": { "login": "Por favor inicia sesiΓ³n para continuar", "error": "Credenciales invΓ‘lidas" } } ``` ## πŸ’° Cost Estimation ### Typical Usage - **Initial setup (1000 keys)**: ~$0.05-$0.10 - **Regular sync (20 keys)**: ~$0.001-$0.005 - **Monthly usage (100 keys)**: ~$0.01-$0.05 ### Real Example ```bash translator-sync πŸ“ locales/ Primary: en.json (1045 keys) πŸ”„ es.json - 20 missing keys βœ… Updated es.json πŸ“Š Summary: Translations: 20 Cost: $0.0006 Mode: Production ``` ## πŸ”„ CI/CD Integration ### GitHub Actions ```yaml name: Sync Translations on: push: paths: ["locales/en/**"] jobs: sync: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "20" - name: Sync Translations env: TRANSLATOR_API_KEY: ${{ secrets.TRANSLATOR_API_KEY }} TRANSLATOR_SERVICE: openai TRANSLATOR_MODEL: gpt-4.1-nano run: | npx translator-sync - name: Commit Changes run: | git config --local user.email "bot@company.com" git config --local user.name "Translation Bot" git add locales/ git diff --staged --quiet || git commit -m "chore: sync translations [skip ci]" git push ``` ## πŸ—οΈ Development ### Requirements - [Bun](https://bun.sh) v1.2+ (primary runtime) - Node.js 18+ (npm compatibility) - TypeScript 5+ ### Local Development ```bash # Clone repository git clone https://github.com/your-org/translator-sync.git cd translator-sync # Install dependencies bun install # Run tests bun test # Run linting bun run check # Build for production bun run build ``` ### Testing ```bash # Run all tests bun test # Run unit tests only bun test tests/unit/ # Run integration tests only bun test tests/integration/ # Run with coverage report bun test --coverage # Run with real API (requires API key) TRANSLATOR_API_KEY=sk-... bun test tests/integration/llm/ ``` ### CI/CD TranslatorSync uses GitHub Actions for continuous integration: - **Automated testing** on all PRs - **Code coverage** enforcement (minimum 50%) - **Linting & formatting** checks - **Type safety** validation - **Security audits** for dependencies - **Multi-platform** testing (Ubuntu, macOS, Windows) See [CI/CD documentation](docs/development/ci-cd.md) for details. ## πŸ”§ Advanced Usage ### Custom Context ```bash # Technical documentation translator-sync --context="technical" # Marketing content translator-sync --context="marketing" # Specific tone translator-sync --context="formal" ``` ### Batch Processing ```bash # Process multiple directories translator-sync ./web/locales ./mobile/locales ./api/locales # Large projects with rate limiting translator-sync --max-concurrent=1 --delay=1000 ``` ### Quality Control ```bash # Review mode (manual approval) translator-sync --review # Quality scoring translator-sync --quality-check # Translation memory translator-sync --use-memory ``` ## πŸš€ Roadmap ### v1.0 (Current) - βœ… JSON & Fluent support - βœ… OpenAI, DeepSeek, Groq providers - βœ… Variable preservation - βœ… Cost tracking ### v1.1 (Next) - 🚧 Anthropic Claude support - 🚧 Google Gemini support - 🚧 Translation memory - 🚧 Quality scoring ### v1.2 (Future) - πŸ“‹ Pluralization rules - πŸ“‹ Context-aware translation - πŸ“‹ Translation review workflow - πŸ“‹ Custom translation models ## 🀝 Contributing We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for complete documentation. **Note**: This repository uses Jujutsu (jj) and `master` as the default branch. ### Quick Start ```bash # Fork and clone your fork jj git clone https://github.com/your-username/translator-sync.git # Create new changelist from master jj new master -m "feat: add amazing feature" # Make changes and test bun test # Create bookmark and push for PR jj bookmark create feat-amazing -r @ jj git push --bookmark feat-amazing --allow-new ``` ## πŸš€ Roadmap ### Coming Soon - [ ] **Privacy-First Telemetry** - Anonymous usage analytics and automatic feedback gathering to improve the tool ## πŸ“š Documentation - [Production Deployment Guide](docs/PRODUCTION-GUIDE.md) - [API Reference](docs/api/) - [Architecture Overview](docs/architecture/system-design.md) - [Troubleshooting](docs/troubleshooting/) ## πŸ“„ License MIT Β© TranslatorSync Contributors ## πŸ™ Acknowledgments - Built with [Bun](https://bun.sh) - Fast JavaScript runtime - Powered by [OpenAI](https://openai.com), [DeepSeek](https://deepseek.com), [Groq](https://groq.com) - Inspired by the i18n community --- **Made with ❀️ for the internationalization community** [⭐ Star us on GitHub](https://github.com/erik-balfe/translator-sync) β€’ [πŸ“¦ View on npm](https://npmjs.com/package/translator-sync) β€’ [πŸ› Report Issues](https://github.com/erik-balfe/translator-sync/issues)