flutter_i18n_translator
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
localesetter that automatically calls onLocaleChanged when Locale Changes. - Adds a
currentstatic I18n instance for direct access (no context required). - Ensures missing
WidgetsLocalizationsoverrides 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.
β Option 1 β Using VSCode Task (Recommended)
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
Option A β Using system dart (β Not recommended with FVM)
{
"version": "2.0.0",
"tasks": [
{
"label": "flutter_i18n_translator",
"type": "shell",
"command": "dart run flutter_i18n_translator",
"group": "build"
}
]
}
Option B β Using FVM (β Recommended)
{
"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
-
Open:
File β Preferences β Keyboard Shortcuts
-
Search:
Run Task -
Add a shortcut.
-
Select your
flutter_i18n_translatortask.
π 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
Option A β Using system dart (β NOT recommended with FVM)
β οΈ 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_translatorOr with flags:
run flutter_i18n_translator --auto-translate --auto_apply-translations -
Working directory:
$ProjectFileDir$
Option B β Using FVM (β recommended)
β This ensures the tool uses the projectβs Flutter & Dart version.
-
Program:
fvm -
Arguments:
flutter pub run flutter_i18n_translatorOr 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
- Go to File β Settings β Keymap
- Search for your tool name:
flutter_i18n_translator - Right-click β Add Keyboard Shortcut
- 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