Skip to main content

FTLLexEngine — Fluent localization for Python

FTLLexEngine is a Python library for Fluent .ftl resources. It loads and validates Fluent messages, formats locale-aware output, and parses localized user input back into exact Python types.

It is designed for applications that want one locale contract for both directions:

  • Format messages, currency, dates, and plural forms for 200+ locales through CLDR
  • Parse localized input back into Decimal, date, datetime, and related typed values
  • Validate .ftl resources and message-variable contracts before serving traffic
  • Keep locale state inside FluentBundle and FluentLocalization instances instead of process-global state

What It Does

Use FTLLexEngine when your application already uses Fluent for output and also needs to accept localized input such as prices, dates, or quantities.

Typical fit:

  • Web services that render localized messages and need to parse localized form input correctly
  • Back-office or finance systems that must avoid float drift when reading user-entered amounts
  • Applications that want boot-time validation of translation resources instead of discovering broken .ftl files during a live request
  • Concurrent programs that need locale handling without shared mutable global state

Example: Format Output And Parse Input With The Same Locale Rules

This example formats a German quote and parses a German currency value back to exact data:

from decimal import Decimal
from ftllexengine import FluentBundle
from ftllexengine.parsing import parse_currency

bundle = FluentBundle("de_DE", use_isolating=False)
bundle.add_resource('quote = Angebot: { CURRENCY($amount, currency: "EUR") }')

text, _ = bundle.format_pattern("quote", {"amount": Decimal("12450.00")})
# → "Angebot: 12.450,00 €" (non-breaking space before €)

parsed, _ = parse_currency("12.450,00 EUR", "de_DE", default_currency="EUR")
# → (Decimal("12450.00"), "EUR")

The same locale rules produce the outbound text and parse the inbound value. You do not need one library for formatting and a different parser for localized input.

Install

Python 3.13 or newer.

Install ftllexengine[babel] for the full runtime. This includes Fluent formatting, locale-aware parsing, and CLDR-backed locale data. Use this option if your application formats localized output or parses localized user input.

uv add ftllexengine[babel]
# or: pip install "ftllexengine[babel]"

Install ftllexengine without extras for the parser-only build. This includes FTL syntax support, AST types, serialization, and validation, with no Babel dependency. Use this option if you only need to parse, inspect, validate, or serialize Fluent resources.

uv add ftllexengine
# or: pip install ftllexengine

Documentation

FTLLexEngine is MIT-licensed. The optional [babel] extra adds Babel under BSD-3-Clause. FTLLexEngine is an independent implementation of the Fluent syntax specification and is not affiliated with or endorsed by Mozilla.

LICENSE · NOTICE · PATENTS.md

Metadata

Release files for ftllexengine 0.167.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ftllexengine 0.167.0
File Size Uploaded
ftllexengine-0.167.0.tar.gz 1.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for ftllexengine 0.167.0
File Interpreter ABI Platform
ftllexengine-0.167.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.7 MB

Release files / ftllexengine-0.167.0.tar.gz

Download URL ftllexengine-0.167.0.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
7d58620961c0872f132768bacda8437e7e137175753b12b1df4640b66f84b2cf
BLAKE2b-256 checksum
How to use checksums
1e52653318751731330a906bb617669848fb56bc520a7441479b6e5971da18e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 15, 2026.

Transparency log

Release files / ftllexengine-0.167.0-py3-none-any.whl

Download URL ftllexengine-0.167.0-py3-none-any.whl
Size 304.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
38b4e5c140c4795d7bbf771987faa6152f60c78272fed52eb2667ce310de0bf9
BLAKE2b-256 checksum
How to use checksums
091a508e8907706c62f366be6c5925ff5f895a9bdcd79dc721a07bdbf664defb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 15, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page