Translate Mozilla Fluent .ftl, with the structure intact
Drop in your app.ftl. KAERIS parses it with Mozilla's own fluent.syntax, so terms, term references, selectors & plural variants and attributes are understood — not flattened to plain text. It translates all 46 languages and reads every line back so you catch meaning drift before it ships.
Terms stay terms
A term like -brand-name = KAERIS and every { -brand-name } reference are kept verbatim, so your brand never gets translated by accident and references stay wired up.
Selectors & plurals
Your { $n -> [one] … *[other] … } blocks keep their variant keys and the default * marker. Each variant is translated in place, and { $variables } can move to match the target's word order.
Attributes & indentation
Message attributes like .label and .tooltip are translated while names and significant indentation are preserved. Comments (#, ##, ###) round-trip untouched.
Before → after
### Sync panel -brand-name = KAERIS sync-button = Sync now .tooltip = Push changes to { -brand-name } status = { $count -> [one] { $count } file up to date *[other] { $count } files up to date }
### Sync panel -brand-name = KAERIS sync-button = Jetzt synchronisieren .tooltip = Änderungen an { -brand-name } senden status = { $count -> [one] { $count } Datei aktuell *[other] { $count } Dateien aktuell }
The term KAERIS is untouched, { -brand-name } stays wired, the selector keys and * default are preserved, and { $count } rides along — only the words change.
Drop your .ftl file
Upload it as-is, or run pip install kaeris and translate from your terminal or CI.
Pick languages & verify
Choose from 46 languages. Leave read-back on to catch meaning drift, lost placeables and overflow.
Ship the .ftl back
Download one .ftl per language, structure intact — ready to drop into your l10n repo or import into your workflow.
FAQ
Does KAERIS support Mozilla Fluent (.ftl)?
.ftl with Mozilla's own reference parser (fluent.syntax), so significant indentation, terms, selectors and attributes are understood exactly rather than treated as plain text. It translates into 46 languages and reads every line back with an independent model to catch meaning drift.Are terms (-brand) and term references preserved?
-brand-name = KAERIS and every { -brand-name } reference are kept verbatim — your brand names never get translated by accident, and references stay wired up.What happens to selectors and plural variants?
{ $count -> [one] … *[other] … } blocks keep their structure, variant keys and the default (*) marker. Each variant's text is translated in place, and the { $variable } placeables inside stay intact — the model is free to move a variable to wherever the target language's word order needs it.Do message attributes like .label and .tooltip get translated?
#, ##, ###) round-trip untouched.Does it fit a Firefox or Pontoon workflow?
.ftl file itself and hands back one .ftl per language with structure intact, so you can drop the output straight into your l10n repository or import it. There is also a CLI (pip install kaeris) and a GitHub Action for CI.Is translating Fluent files free?
.ftl file free with no account (up to 10,000 characters). Paid tiers raise the per-file limit and add GPT-4o-mini; Lifetime is a one-time purchase where you bring your own OpenRouter key.Free, no account. Read every line back in your own language.
Drop your .ftl file →See the read-back benchmark · CLI & GitHub Action