Mozilla Fluent
Mozilla Fluent · .ftl · 46 languages · Free

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.

Translate your .ftl → $ pip install kaeris
Terms & { -term } references kept Selectors & *[other] preserved Attributes translated in place Comments round-trip No account needed
What breaks in Fluent — and how KAERIS handles it

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.

Real Fluent, round-tripped

Before → after

app.ftl (en)
### 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
}
app.ftl (de)
### 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.

From file to shipped in 3 steps
1

Drop your .ftl file

Upload it as-is, or run pip install kaeris and translate from your terminal or CI.

2

Pick languages & verify

Choose from 46 languages. Leave read-back on to catch meaning drift, lost placeables and overflow.

3

Ship the .ftl back

Download one .ftl per language, structure intact — ready to drop into your l10n repo or import into your workflow.

Fluent, answered

FAQ

Does KAERIS support Mozilla Fluent (.ftl)?
Yes. KAERIS parses .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?
Yes. Term definitions like -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?
Your { $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?
Yes. Each attribute value is translated while the attribute names and the message structure stay exactly as they were. Comments (#, ##, ###) round-trip untouched.
Does it fit a Firefox or Pontoon workflow?
KAERIS translates the .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?
Yes — you can translate a .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.
Translate your Fluent file now

Free, no account. Read every line back in your own language.

Drop your .ftl file →

See the read-back benchmark · CLI & GitHub Action