lib/shop_web/live/checkout_live.ex:88
put_flash(socket, :error, gettext("We couldn't process your payment."))
# Shown when the charge fails.
We couldn't process your payment.
- Placeholders
- Plural forms
- Glossary
Soft launch Dialecto is still in testing, and details on this site may change as we finish it.
Only your translation files ever reach Dialecto, and it changes them one clean line at a time.
Everything else in your repository stays where it is, unread. Every change comes back as a pull request your team reviews.
gettext · JSON · Phoenix first · built in the EU
# Shown when the charge fails.#: lib/shop_web/live/checkout_live.ex:88msgid "We couldn't process your payment."msgstr "Paiement refusé."msgstr "Nous n'avons pas pu traiter votre paiement."
the only line touched
Come through to the workshop. Your strings arrive grouped by domain, and each one carries the place it's shown in your app. You work a domain at a time, the checks keep pace with you, and nothing you stage touches anything you didn't.
See the editorlib/shop_web/live/checkout_live.ex:88
put_flash(socket, :error, gettext("We couldn't process your payment."))
# Shown when the charge fails.
We couldn't process your payment.
Only your translation files reach Dialecto, and you choose which. Your source code never does. How much access Dialecto gets is your call, down to none at all.
You don't have to take our word for it.
priv/gettext/**/*.po and nothing elseIf your pipeline also sends the few source lines around each string, a rename can follow its call sites. That, too, is your workflow's choice.
lib/ · app/ · src/.env · config/runtime.exsInstall it, and Dialecto reads the translation files and opens the pull requests itself. GitHub's permission covers the whole repository, so the limit to translation files is enforced by Dialecto's own code.
Dialecto gets no access to your repository at all. Your CI sends only the files your own workflow names, and opens Dialecto's pull requests. It is the strongest posture, and it's yours to pick.
Built in the EU, and self-hostable on your own metal.
The security modelPlaceholders, plural forms, completeness and glossary terms are checked on every change, and a person reviews it before it goes anywhere. The merge gate holds a pull request that would leave new strings untranslated. An advisory quality check scores what the pull request adds, and whether that one blocks is your call.
The merge gateLocalize checkout (fr)acme/storefront · pull request #284
OpenOne line changed. Comments, order and wrapping stay exactly where they were; the rest of the file does not move.
We don't sell you a model. Bring your own, local or frontier. Dialecto grounds it in your domain, your glossary, your translation memory and the voice you show it, and nothing a model drafts merges on its own.
How context worksA person approves it before it ships.
Open your running Phoenix or Astro app, click any text and edit it in the Dialecto sidebar. Or drive Dialecto from your coding agent over MCP. Either way it lands as the same clean pull request.
The add-onsOver MCP your coding agent does the same: list · stage · preview · open a pull request.
We set the Phoenix table first. Dialecto patches gettext and JSON catalogs in place, and Rails YAML is in beta. Wrapping, comments, plurals and order all survive, because the file is never regenerated.
# Shown on the confirmation page.msgid "Your order is on its way."msgstr "Votre commande est en route."
Phoenix firstand any .po or .pot
"checkout": { "shipped": "Votre commande est en route."}
Flat, nested, and browser extensionswith the in-context editor for Astro
fr: checkout: shipped: Votre commande est en route.
Railsbetaconfig/locales, keys and plurals
Only your translation files, and you choose which. Source code, secrets, tests and history never do. With the GitHub App, Dialecto reads those files and opens the pull requests itself, and its own code enforces the limit. From your own pipeline, Dialecto has no access to your repository at all: your CI sends the files and opens the pull requests.
No. Your files stay in your repository, exactly as they are. Dialecto works on them in place and sends each change back as a pull request. Turn it off tomorrow and you've lost nothing.
gettext (.po and .pot), JSON in its flat, nested and browser-extension shapes, and Rails YAML, which is in beta. Phoenix is the experience we polished first, and the in-context editor ships for Phoenix and Astro.
Yes: local or frontier, your call. We never claim the best translation model; we make whichever model you choose good by grounding it in your domain, your glossary and your voice, and every suggestion still goes through review.
The platforms keep your strings in their database and regenerate your files on the way back. The command-line tools regenerate them too, only faster: we ran two of their published loaders over a valid 104-line gettext file and got back 23 broken lines from one and a silently changed translation from the other. We keep the receipts. Dialecto never regenerates a file; it patches the line you changed and leaves the rest as it found it.
We're onboarding the first teams by hand. Ask for early access and tell us your framework, and we'll set a place for you. It's free to start, and priced to be an easy yes when your team grows.
Sit; the table's set. Install the app or wire up your pipeline, see your strings by domain, and ship the first clean pull request. Decide from there.
Nothing to migrate · no trackers on this site · no client-side JavaScript