Placeholders
Keep named placeholders such as {userName} and {count} present in translated messages.
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.
$ forthwith check
[ERROR] Placeholder mismatch · welcomeUser
lib/l10n/app_es.arb:18 missing {userName}
Install path
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.
Use Homebrew on macOS, the install script on Linux, or Scoop on Windows.
Keep the check beside your source code and existing localization resources.
Review actionable findings locally before creating an account or changing a file.
brew install Forthwith-LLC/forthwith/forthwith
cd path/to/your-project
forthwith check
Framework-aware validation
Forthwith checks message content and resource structure together, so a translation cannot look correct while silently dropping a runtime value.
Keep named placeholders such as {userName} and {count} present in translated messages.
Validate target-language plural forms and the variables that select them.
Find absent keys and empty translations across source and target ARB files.
Report malformed resources, duplicates, and inconsistent structured values.
Sample diff
Generated translations land beside their metadata and existing messages. Review the exact ARB update before Flutter generates localized code.
--- 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
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.
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
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.
We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect