Soft launch Dialecto is still in testing, and details on this site may change as we finish it.

Built for Phoenix first.

We built Dialecto's gettext support for Phoenix first, and it's the experience we've polished most. If you localize a Phoenix app, this is for you.

Why it fits

Dialecto is gettext-native — no export step, no format conversion, no "sync" that rewrites your files. Your gettext domains map straight onto Dialecto's domain-driven editing, and the validation matches what your app actually runs: %{} placeholder parity and plural-form checks that agree with Elixir's Gettext runtime, so a translation that passes here works there.

The quickstart

  1. Connect your repo. The scan runs on your side and sends a surgical slice — your .po/.pot files plus the usage snippets around each string. Nothing else leaves.
  2. Scan. Your catalog appears organized by domain, every string with its context.
  3. Edit by domain. Fast navigation, bulk operations, review built in.
  4. Ship a clean pull request — into whichever branch you're working on, one line of diff per change.

The full Elixir guide →

The Elixir-specific wins

Your domains, already there

Phoenix apps split translations across gettext domains — default, errors, emails, whatever you've grown. Dialecto reads that structure and makes it the editing model: browse by domain, translate a domain at a time, rearchitect domains when your app outgrows them.

In-place context from your call sites

Every string is shown with the snippet of your code that uses it — the surgical slice the scan captured. Translators see what a string is for; nobody translates blind.

Rename a msgid, fix the code

Renaming a msgid rewrites the gettext() call-sites in your source — computed by Dialecto, applied by a CI action in your repo, shipped in the same pull request. A rename is finally one operation, not a grep-and-pray.

A merge gate on your pull requests

The completeness check fails a pull request on strings it newly leaves untranslated — as a required check, if you want teeth. Configured in your repo's Dialecto settings, with a link that takes the author straight to the strings that need them.

Bring your own model, grounded

Machine-translation suggestions are grounded in your brand voice, your audience personas, your glossary, and the domain each string lives in — whichever model you bring, frontier or local. Dialecto is model-agnostic on purpose: we don't claim "best translation," we make sure your model sees exactly the right context and that a human signs off before anything merges.

Get started with your Phoenix app.