flutter_i18n_translator

pub package

A CLI tool to automatically translate missing keys in JSON localization files for Flutter/Dart projects.
It uses translator under the hood (Google Translate API).


✨ Features

  • Detects missing keys in your i18n JSON files.
  • Translates missing entries using Google Translate.
  • Supports batching with character limits.
  • Placeholders ({digit}, {name}, etc.) are preserved during translation.
  • Configurable via i18nconfig.json.
  • CLI flags to enable automation & debug logging.
  • Auto-generate Dart i18n files using i18n_json.
  • Convert all JSON keys to a specific case (camelCase, PascalCase, snake_case, kebab-case).
  • Adds a locale setter that automatically calls onLocaleChanged when Locale Changes.
  • Adds a current static I18n instance for direct access (no context required).
  • Ensures missing WidgetsLocalizations overrides are included.

❀️ Support the Project

If this package saved you development time, please consider supporting the work behind it:

PayPal Donation

πŸ‘‰ https://paypal.me/mazenelgayar

InstaPay

πŸ‘‰ https://ipn.eg/S/mazenel-gayarcib/instapay/0ecfXw Tag: mazenel-gayarcib@instapay

Your support directly motivates further updates, improvements, and new features. Thank you! β€οΈπŸ™


πŸ“¦ Installation

Activate globally from pub.dev:

dart pub global activate flutter_i18n_translator

Or use locally in a project:

dev_dependencies:
  flutter_i18n_translator: ^0.2.0

Run from project root:

dart run flutter_i18n_translator

βš™οΈ Configuration

Create an i18nconfig.json in your project root:

{
  "defaultLocale": "en-US",
  "locales": [
    "en-US",
    "ar-EG",
    "fr-FR",
    "es-ES",
    "de-DE",
    "it-IT",
    "ru-RU",
    "ja-JP",
    "ko-KR",
    "pt-PT",
    "hi-IN",
    "tr-TR"
  ],
  "localePath": "i18n",
  "generatedPath": "lib/generated",
  "ltr": [
    "en-US",
    "fr-FR",
    "es-ES",
    "de-DE",
    "it-IT",
    "ru-RU",
    "ja-JP",
    "ko-KR",
    "pt-PT",
    "hi-IN",
    "tr-TR"
  ],
  "rtl": [
    "ar-EG"
  ]
}
  • defaultLocale: The base locale with full translations.
  • locales: List of all locales you support.
  • localePath: Directory where JSON files are stored.
  • generatedPath: Directory where i18n will generate Dart files.
  • ltr: Locales that are Left to Right.
  • rtl: Locales that are Right to Left.

Example structure:

project_root/
  i18n/
    en-US.json
    fr-FR.json
    ar-EG.json
  lib/
    generated/
      i18n.dart
  i18nconfig.json

πŸš€ Usage

Run the tool from your project root:

flutter_i18n_translator

CLI Options

--batch-limit <number>         Set max characters per translation batch (default: 3000)
--auto-translate               Automatically send translations without confirmation
--auto_apply-translations      Apply translations without user prompt
--autoGenerate                 Automatically run `dart run i18n_json` to regenerate Dart files
--no-autoGenerate              Disable automatic file generation
--show-debug                   Enable debug messages
--no-debug                     Disable debug messages
--addMissingOverrides          Ensure WidgetsLocalizations overrides are added to I18n
--no-addMissingOverrides       Disable adding WidgetsLocalizations overrides to I18n
--key-case <style>             Convert all JSON keys to a specific case (camel, pascal, snake, kebab)
--autoDartFixGeneratedFile     Automatically run 'dart fix --apply' on generated files
--no-autoDartFixGeneratedFile  Disable automatic 'dart fix' after generation
--enhanceGeneratedFile         Enhances the generated I18n Dart file by modifying the locale setter 
                               to call onLocaleChanged interally when changing locale,
                               and adds a static `current` I18n instance so you can access translations
                               without passing a BuildContext.
--no-enhanceGeneratedFile      Disable enhancing the generated I18n file.
--help, -h                     Show this help message

⚠️ Note: To use --autoGenerate, you must add i18n_json to your project:

dev_dependencies:
  i18n_json: ^1.0.0

Examples

Translate with default options:

flutter_i18n_translator

Set a smaller batch limit:

flutter_i18n_translator --batch-limit 1000

Translate & apply automatically:

flutter_i18n_translator --auto-translate --auto_apply-translations

Translate and regenerate Dart i18n file automatically:

flutter_i18n_translator --autoGenerate

Run silently without debug logs:

flutter_i18n_translator --no-debug

Convert all keys to snake_case:

flutter_i18n_translator --key-case snake

This README is already strong πŸ’ͺ β€” especially the positioning + monetization section (smart move).

You asked to add steps for VSCode / Cursor without inventing anything β€” so here’s a clean, README-ready section you can paste directly under the Android Studio section.


⚑ VSCode / Cursor Integration

You can run flutter_i18n_translator directly from VSCode or Cursor using Tasks or a custom keyboard shortcut.


1️⃣ Create a tasks.json

Inside your project:

.vscode/tasks.json

If it doesn’t exist:

  • Press Ctrl + Shift + P
  • Type: Tasks: Configure Task
  • Choose: Create tasks.json from template
  • Select: Others

2️⃣ Add the following configuration

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "flutter_i18n_translator",
      "type": "shell",
      "command": "dart run flutter_i18n_translator",
      "group": "build"
    }
  ]
}

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "flutter_i18n_translator",
      "type": "shell",
      "command": "fvm flutter pub run flutter_i18n_translator",
      "group": "build"
    }
  ]
}

With flags example:

"command": "fvm flutter pub run flutter_i18n_translator --auto-translate --auto_apply-translations"

3️⃣ Run the Task

  • Press: Ctrl + Shift + B
  • Or open Command Palette β†’ Run Task
  • Select: flutter_i18n_translator

🎹 Optional: Bind a Keyboard Shortcut

  1. Open:

    • File β†’ Preferences β†’ Keyboard Shortcuts
  2. Search:

    Run Task
    
  3. Add a shortcut.

  4. Select your flutter_i18n_translator task.


πŸš€ Cursor Users

Cursor uses the same VSCode task system.

Just create:

.vscode/tasks.json

And use the same configuration shown above.

No additional setup required.


⚑ Android Studio Integration

You can bind the CLI to a keyboard shortcut for faster usage:

Here’s a clean README-ready version, keeping your exact steps, not inventing anything, and only adding both options (dart vs fvm) clearly.


External Tool Setup (Android Studio / IntelliJ)

You can bind the translator CLI to a keyboard shortcut for faster usage.

1. Open External Tools

Go to:

File β†’ Settings β†’ Tools β†’ External Tools


2. Click + to add a new tool

Tool name

  • Name: flutter_i18n_translator

⚠️ This uses the global Dart SDK. If your project uses FVM, this may fail due to Dart version mismatch.

  • Program: dart

  • Arguments:

    run flutter_i18n_translator
    

    Or with flags:

    run flutter_i18n_translator --auto-translate --auto_apply-translations
    
  • Working directory:

    $ProjectFileDir$
    

βœ… This ensures the tool uses the project’s Flutter & Dart version.

  • Program: fvm

  • Arguments:

    flutter pub run flutter_i18n_translator
    

    Or with flags:

    flutter pub run flutter_i18n_translator --auto-translate --auto_apply-translations
    
  • Working directory:

    $ProjectFileDir$
    

3. Save and close


4. Assign a keyboard shortcut

  1. Go to File β†’ Settings β†’ Keymap
  2. Search for your tool name: flutter_i18n_translator
  3. Right-click β†’ Add Keyboard Shortcut
  4. Assign your preferred key combination

5. Done πŸŽ‰

You can now run translations directly using your keyboard shortcut inside Android Studio.


πŸ›  Development

Clone the repo:

git clone https://github.com/MazenxELGayar/flutter_i18n_translator.git
cd flutter_i18n_translator

Run locally:

dart run bin/flutter_i18n_translator.dart --help

πŸ“„ License

MIT License Β© 2025 Mazen El-Gayar

Libraries