locale.ly Sign up

For Flutter teams • Built around your ARBs

Translations, without the hand-off mess.

Send your Flutter app's strings to anyone who can write. They translate them in a web app. You pull approved changes back into your ARBs — with context, history, and zero spreadsheets.

$ dart pub global activate locale_helper_cli

Open-source CLI · Hosted backend at locale.ly

How it works

Three commands, one shared workspace.

No bespoke YAML, no proprietary file format. Your ARBs stay the source of truth.

1

Publish your ARBs

locale_helper publish uploads your strings with Claude-generated context for each key so translators understand intent.

2

Reviewers translate

Invite anyone with a link. They edit per locale side-by-side with the source. Suggestions wait for owner approval; direct edits land immediately.

3

Pull back

locale_helper pull --apply writes approved changes back to your ARB files. A 3-way diff keeps your local edits safe.

The review surface

Built for the people doing the work.

Translators see one string at a time, with source context, AI-generated intent notes, and a thread for asking questions. Owners review pending suggestions and approve in one click.

  • Per-locale review state

    Approve de while fr is still in review.

  • Per-string change history

    See every edit, who made it, and where it came from (suggestion / direct / publish).

  • Comments threaded per key

    Translators ask, you answer. Context stays attached to the string forever.

  • Safe concurrent edits

    A baseline lockfile detects conflicts before they overwrite your work.

app.locale.ly
Screenshot of the locale.ly review UI

Stays in your repo

Stays out of your way.

Lives next to your code, not in your CI. Idempotent. Your .locale_helper/ directory tracks just enough state to keep pushes and pulls safe.

$ locale_helper init                  # one-time per project
$ locale_helper publish               # pushes ARBs + AI context
                                      # reviewers do their thing
$ locale_helper pull --apply          # writes approved changes back

Pricing

Free during beta.

We'll figure out paid tiers when usage tells us what's worth charging for. Until then, everything is on the house.

Available now

Beta

Everything we've built, no limits.

$0/forever

  • Unlimited projects + locales
  • Unlimited reviewers
  • AI-generated context per string
  • Per-locale review state + history
  • Open-source CLI
Sign up free
Later

Pro

For teams shipping in many languages.

$??/mo

  • · SSO + audit log
  • · Higher AI quota
  • · Self-host option
  • · SLA + priority support
  • · Whatever else you ask for
Tell us what you need

FAQ

Questions you'd reasonably ask.

What's the catch with "free forever"?

No catch right now. We're pre-launch and prioritising usage over revenue. When we eventually add a paid tier (probably for teams with SSO needs or heavy AI usage), the beta you signed up under will stay free. We'll announce changes in advance.

How is this different from Crowdin / Lokalise / Phrase?

Those are mature, generalist platforms. locale.ly is opinionated for Flutter — your ARBs stay the source of truth, the CLI is the only way things move in and out, and there's no proprietary file format. If you're not on Flutter or you need Figma plugins, those tools are probably a better fit.

Do my strings stay private?

Yes. Bundles are stored on our backend (encrypted at rest) and only accessible to project members you invite. AI context is generated via Anthropic with no training on your data. Self-hosting is on the roadmap for teams who'd rather keep everything on their own infra.

Can I self-host?

The full server source lives in the same monorepo as the CLI — Caddy, Postgres, systemd unit, bootstrap script, the works. It's not yet a first-class supported product, but if you want to run your own copy on a VPS today, everything you need is there.

Does it work for non-Flutter projects?

Not today. The CLI parses ARB files and writes them back. Anything built on a different format (gettext .po, iOS .strings, Android XML) would need a new loader. If you'd want one, get in touch.

What happens if two reviewers edit the same string?

Last write wins on the server, but the change history shows every edit and who made it. On the CLI side, a baseline lockfile detects when the server has changed since your last publish and warns you before overwriting.

Try it on your next sprint.

Five minutes to set up. Free forever in beta.