django-modeltranslation · ponyglot[modeltranslation]

No more empty language columns.

django-modeltranslation gives every field a column per language. Ponyglot fills the empty ones, flags the ones that went stale, and lets an editor approve each change.

Where django-modeltranslation gets hard

A column per language is simple and fast. It also makes missing translations easy to miss.

Fallbacks hide gaps

With fallback languages set, an empty title_de quietly shows the English title. Visitors notice, but your team doesn't.

Edits go unnoticed

The English column changes and the other columns keep the old meaning. Nothing marks them as out of date.

New languages mean new columns

Adding a language adds empty columns on every registered model, often thousands of rows at once.

What Ponyglot adds to django-modeltranslation

Reads your translation registry

Fields registered in translation.py are picked up automatically, with no model changes.

Gap and stale overview

See which objects are missing a language and which translations are older than their source.

Suggestions with a diff

Results come back as suggestions next to the current value. An editor accepts them, and nothing is overwritten without approval.

Wagtail too

wagtail-modeltranslation projects use the same connector, and pages and models share one glossary and translation memory.

Setup

An open-source, BSD-licensed extra for the core package. Use it with your own DeepL or LLM key, or connect it to the hosted service.

pip install "ponyglot[modeltranslation]"

# settings.py
INSTALLED_APPS += [
    "ponyglot",
    "ponyglot.contrib.modeltranslation",
]
PONYGLOT = {
    "API_KEY": env("PONYGLOT_API_KEY"),  # or your own DeepL / LLM key
    "SOURCE_LANGUAGE": "en",
}

Planned API. It may change during early access.

django-modeltranslation questions

Do I have to change my models?

No. Ponyglot uses the fields you already registered with django-modeltranslation.

Does it work with wagtail-modeltranslation?

Yes, through the same connector.

Will it overwrite existing translations?

No. Results are suggestions with a diff, and an editor approves them.

Do I need the hosted service?

No. The connector works on its own with your own DeepL or LLM key. The hosted service adds translation memory, glossary, delta sync, review and QA.

One layer, the whole Django stack

Pages, blog, product catalog and app content share one glossary and one translation memory.

django CMS

djangocms-ponyglot

Pages, placeholders and plugin trees — structure-aware, lands as versioned drafts.

Wagtail

wagtail-ponyglot

StreamField and rich text, plugs into wagtail-localize as a translation backend.

django-parler

ponyglot[parler]

Translated models like djangocms-stories, catalogs and app content.

Get early access

We're onboarding a small group of agencies and product teams running multilingual django CMS, Wagtail or Django sites.

Join early access