← SkillSafe / ARB Desk

Your Flutter ARB files, checked the way gen-l10n reads them

Paste your template app_en.arb. Your browser checks every message with a port of gen-l10n's own ICU parser and shows what each plural really prints for 1, 2, 5 or 21 in any language - free, nothing uploaded. A paid run annotates the template for translators or translates it into a new locale, and every message it returns is checked again.

The first three replay saved model runs; the Polish one shows what the free check catches. All free.

1. The template ARB (the file named in template-arb-file, usually app_en.arb)

Drop an .arb file here, or

2. The target locale

Drop the translation's .arb here, or
Paste a template ARB, or load an example.

3. Guidance (optional - formality, glossary, tone)

Check a template first to price the run.

Your recent runs

What this does, and what it does not

Flutter apps keep their text in ARB files: a template such as lib/l10n/app_en.arb and one file per language. flutter gen-l10n (run by flutter pub get when generate: true is set) compiles them into AppLocalizations. Messages use ICU syntax - {name}, {count, plural, one{...} other{...}}, {gender, select, ...} - and the metadata under "@key" declares each placeholder's type and tells translators what the text means.

The check is a JavaScript port of gen-l10n's own message parser and placeholder rules (from the Flutter tool's source, BSD-3-Clause), so a message it rejects is one gen-l10n rejects. Two rules catch translations out: in gen-l10n =1 is the one case, not an exact match, so in Russian or Ukrainian it also prints for 21 and 31; and a plural without a category the language needs (Polish few and many) silently shows the other text. The preview shows both. The page never runs Flutter and cannot tell whether a translation reads well - that is what a native reviewer is for. Derived from the agent skill @flutter/flutter-localizing-apps (flutter/agent-plugins, BSD-3-Clause; see the notice).