json_to_arb
json_to_arb is a Dart command-line tool for Flutter localization. It lets you keep translations in multiple modular JSON files (per feature, module, or screen) for each language, then automatically merges them into a single ARB file per locale—ready for Flutter's official localization system.
Key Features
- Modular JSON files for each language and feature/module (e.g.,
app.json,home.json,profile.json). - Automatic merging and flattening of nested objects, with file name prefixes to avoid key collisions.
- Generates a single ARB file per language in your chosen output directory (matching Flutter's
arb-dir). - Seamless integration: Flutter's localization code generator picks up the ARB files, so you access translations with strongly-typed properties.
Benefits
- Easy, maintainable translation workflow.
- No manual merging or risk of duplicate keys.
- Works out-of-the-box with Flutter's localization system.
Installation
Note: This package is intended for development use only. Add it to your dev_dependencies so it is not included in your production build.
Add to your pubspec.yaml:
dev_dependencies:
json_to_arb: ^0.1.13
Then run:
flutter pub get
Usage
Global CLI Installation
You can install json_to_arb globally to use it as a command-line tool anywhere:
dart pub global activate json_to_arb
After activation, run:
json_to_arb
This will execute the conversion process as defined in your configuration.
-
Add your JSON files Organize by language and feature/module:
lib/l10n/en/app.json lib/l10n/en/home.json lib/l10n/ar/app.json lib/l10n/ar/home.json -
Configure your project In your
pubspec.yaml, add:arb_directories: source: lib/l10n output: lib/l10n/app_arb locales: - en - arImportant: The
outputpath must match thearb-dirin your Flutterpubspec.yaml:flutter: generate: true # arb-dir: lib/l10n/app_arbThis ensures ARB files are picked up automatically by Flutter's localization system.
-
Run the converter From your project root:
dart run json_to_arb
Output Example
ARB files are created for each language:
lib/l10n/app_arb/app_en.arb
lib/l10n/app_arb/app_ar.arb
Sample JSON:
{
"welcome": "Welcome",
"home": {
"title": "Home Title"
}
}
Resulting ARB:
{
"appWelcome": "Welcome",
"appHomeTitle": "Home Title"
}
Accessing Translations in Flutter
After generating ARB files and running Flutter's localization code generation:
AppLocalizations.of(context)!.appWelcome // "Welcome"
AppLocalizations.of(context)!.appHomeTitle // "Home Title"
How It Integrates with Flutter Localization
Flutter expects a single ARB file per locale. This tool merges all your JSONs for a locale into one ARB file, placed in the directory specified by arb-dir. Flutter's localization system automatically reads these files—no manual steps or risk of duplication.
Contributing
Contributions are welcome! If you have ideas, bug reports, or feature requests, please open an issue or submit a pull request on GitHub:
- Fork the repository
- Create your feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -am 'Add new feature') - Push to the branch (
git push origin feature/my-feature) - Open a pull request
Please make sure your code follows the existing style and includes relevant documentation and tests if applicable.
Errors and warnings are printed in color for easy debugging.