UNPKG

i18n-ai

Version:

AI-powered translation tool for i18n JSON files

251 lines (191 loc) 7.49 kB
# i18n-ai [![npm version](https://badge.fury.io/js/i18n-ai.svg)](https://www.npmjs.com/package/i18n-ai) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Downloads](https://img.shields.io/npm/dt/i18n-ai.svg)](https://www.npmjs.com/package/i18n-ai) [![GitHub stars](https://img.shields.io/github/stars/dalisys/i18n-ai.svg?style=social&label=Star)](https://github.com/dalisys/i18n-ai) AI-powered translation tool for i18n JSON files. Translates while preserving nested structure, supports multiple AI providers, and offers CSV import/export for easy management. ## Features - 🤖 Multiple AI providers: OpenAI, Anthropic, Gemini, DeepSeek, XAI - 🔌 Support for custom translation API endpoints - 🔄 Preserves JSON structure and handles large files with chunking - 🔧 Customizable translation settings (models, tone, context) - 📊 CSV import/export for reviewing translations - ⚙️ Smart handling of existing translations ## Installation ```bash npm install --save-dev i18n-ai # or yarn add -D i18n-ai ``` ## Quick Start 1. Create a config file (`translator.config.json`): ```json { "source": { "path": "./locales/en.json", "code": "en" }, "targets": [ { "path": "./locales/es.json", "code": "es" } ], "provider": "openai" } ``` 2. Set up your API key in `.env`: ```env OPENAI_API_KEY=your_api_key_here ``` 3. Run the translation: ```bash npx i18n-ai translate ``` ## Basic CLI Commands ```bash # Translate using config file npx i18n-ai translate # Use custom config npx i18n-ai translate --config custom-config.json # Force overwrite existing translations npx i18n-ai translate --overwrite # List available providers and their details npx i18n-ai providers # List available models npx i18n-ai models npx i18n-ai models --provider openai # Export translations to CSV npx i18n-ai export --output ./exports/translations.csv # Import translations from CSV npx i18n-ai import -i ./data/translations.csv ``` ## Configuration Options | Option | Description | Default | | ---------------- | --------------------------------------------- | ---------------- | | `source.path` | Path to source language file | Required | | `source.code` | Source language code | Required | | `targets` | Array of target language configurations | Required | | `provider` | AI provider (`openai`, `anthropic`, etc.) | `openai` | | `model` | Model name for selected provider | Provider default | | `chunkSize` | Number of keys per translation chunk | 50 | | `concurrency` | Number of concurrent translation requests | 3 | | `overwrite` | Whether to overwrite existing translations | false | | `description` | Project context for better translations | - | | `tone` | Desired tone (e.g., "formal", "casual") | - | | `ignoreKeys` | Array of keys to ignore during translation | - | | `customProvider` | Configuration for a custom translation API | - | | `stopOnError` | Whether to stop the process when error occurs | true | ## Advanced Usage ### Translation Context and Tone ```json { "description": "A business dashboard application with professional terminology", "tone": "formal" } ``` ### Ignoring Keys ```json { "ignoreKeys": ["app.constants", "validation.regex"] } ``` ### Using a Custom Translation Provider You can integrate with any translation API by configuring a custom provider. With this approach, you take full control of the request format and authentication: ```json { "customProvider": { "url": "https://api.your-translation-service.com/translate", "method": "POST", "headers": { "Content-Type": "application/json", "Authorization": "Bearer YOUR_API_KEY_HERE", "X-Custom-Header": "value" }, "body": { "text": "{{text}}", "source": "{{sourceLang}}", "target": "{{targetLang}}", "format": "json" }, "responsePath": "data.translations[0].translatedText" } } ``` When `customProvider` is specified, it takes precedence over the regular provider setting. #### Configuration Options: | Option | Description | Default | | -------------- | ---------------------------------------------- | -------------- | | `url` | API endpoint URL | Required | | `method` | HTTP method (GET or POST) | POST | | `headers` | HTTP headers (including your auth headers) | {} | | `body` | Request body template with placeholders | Default format | | `responsePath` | JSON path to extract translation from response | - | #### How It Works: 1. **Request Body**: The package will replace these placeholders in your request body: - `{{text}}` - The text to translate - `{{sourceLang}}` - The source language code - `{{targetLang}}` - The target language code 2. **Response Handling**: - If `responsePath` is specified, the package will extract the translation using that path - If not specified, the entire response body will be treated as the translation 3. **Error Logging**: - When errors occur with the custom provider, detailed logs are automatically created - Log files are saved in the `i18n_ai_logs` directory at the root of your project ### CSV Import/Export Options ```json { "export": { "outputPath": "./exports/translations.csv", "delimiter": ";" } } ``` ## Programmatic Usage ```typescript import { translateFiles, exportTranslationsToCSV, importTranslationsFromCSV, getAvailableProviders, } from "i18n-ai"; // Translation await translateFiles({ configPath: "./custom-config.json", overwrite: false, }); // CSV Export await exportTranslationsToCSV(config, { outputPath: "./exports/translations.csv", delimiter: ",", }); // CSV Import await importTranslationsFromCSV(config, { inputPath: "./imports/translations.csv", delimiter: ",", skipHeader: true, overwrite: false, }); // Get available providers and models const providers = getAvailableProviders(); console.log("Available providers:", providers.providers); console.log("Default model for OpenAI:", providers.defaultModels.openai); console.log("All OpenAI models:", Object.keys(providers.models.openai)); ``` ## Supported Providers The package currently supports the following AI providers: - **OpenAI** (API key: `OPENAI_API_KEY`) - **Anthropic** (API key: `ANTHROPIC_API_KEY`) - **Gemini** (API key: `GEMINI_API_KEY`) - **DeepSeek** (API key: `DEEPSEEK_API_KEY`) - **XAI** (API key: `XAI_API_KEY`) - **Custom** (Define your own translation API endpoint) You can get a list of all supported providers and their models using the `getAvailableProviders()` function or the `providers` CLI command. ## Support the Project If you find this package useful, please consider: - ⭐ Giving it a star on GitHub: https://github.com/dalisys/i18n-ai - 🔧 Contributing with bug reports, feature requests, or pull requests - 📣 Sharing it with other developers who might find it helpful Contributions of all kinds are welcome! ## License MIT