All supported frameworks
Flutter workflow

Translate and validate Flutter ARB files

Translate only new and changed messages, then check ARB structure, placeholders, and plural forms before code generation turns a small localization defect into a failed build.

lib/l10n/app_en.arb

$ forthwith check

[ERROR] Placeholder mismatch · welcomeUser

lib/l10n/app_es.arb:18 missing {userName}

Local scan · no account · no upload
ARB files remain the source of truth
ICU placeholders stay intact
Works before Flutter code generation

Install path

Check the repository you already have

Install Forthwith, change into the Flutter project, and scan the ARB files already referenced by your localization configuration. No Forthwith config is needed for validation.

  1. 1

    Install the Forthwith CLI

    Use Homebrew on macOS, the install script on Linux, or Scoop on Windows.

  2. 2

    Open the repository root

    Keep the check beside your source code and existing localization resources.

  3. 3

    Run forthwith check

    Review actionable findings locally before creating an account or changing a file.

macOS quick start

No configuration required
brew install Forthwith-LLC/forthwith/forthwith
cd path/to/your-project
forthwith check
Linux and Windows install options The first check never changes files.

Framework-aware validation

Catch ARB defects before gen-l10n

Forthwith checks message content and resource structure together, so a translation cannot look correct while silently dropping a runtime value.

Placeholders

Keep named placeholders such as {userName} and {count} present in translated messages.

ICU plurals

Validate target-language plural forms and the variables that select them.

Missing messages

Find absent keys and empty translations across source and target ARB files.

ARB structure

Report malformed resources, duplicates, and inconsistent structured values.

Sample diff

Review localization like any other code change

Generated translations land beside their metadata and existing messages. Review the exact ARB update before Flutter generates localized code.

  • Native files stay in their expected location.
  • Placeholders remain visible to reviewers.
  • Only new, changed, or repaired entries appear in the diff.
lib/l10n/app_es.arb Generated change
--- a/lib/l10n/app_es.arb+++ b/lib/l10n/app_es.arb@@ -5,3 +5,4 @@   "checkoutTitle": "Finalizar compra",+  "welcomeUser": "Hola, {userName}",   "@welcomeUser": {"placeholders": {"userName": {}}}

CI recipe

Make ARB validation part of the Flutter pipeline

Run Forthwith before tests or code generation to give localization defects their own concise report and a clear failing status.

Validation needs no Forthwith token. Exit code 1 fails the job when errors are found; --warnings-as-errors also treats warnings as release blockers.

.github/workflows/localization.yml GitHub Actions
name: Flutter ARB validation

on: pull_request

jobs:
  localization:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Forthwith
        run: curl -fsSL https://raw.githubusercontent.com/Forthwith-LLC/forthwith-releases/main/install.sh | bash
      - name: Validate localization files
        run: forthwith check --warnings-as-errors

When you are ready to translate

Move from a local report to a reviewable locale update

Initialize Forthwith when you want translation, configure target locales, and translate only new, changed, and missing messages. Updated ARB files remain ready for gen-l10n and Git review.