django-parler · ponyglot[parler]

Your parler models, translated and up to date.

Blog posts, product catalogs, app content: if it's stored with django-parler, Ponyglot finds the translated fields, fills the missing languages and flags what changed since the last run.

Where django-parler translation gets hard

django-parler stores the translations. Getting them written, and keeping them current, is left to you.

New objects arrive in one language

A product import or a new blog post shows up in English. The other languages stay empty until someone fills them field by field.

Edits go unnoticed

A product description gets rewritten. The French and Italian descriptions now describe something else, and nothing flags it.

Volume

Thousands of catalog entries times several languages is not a job for an editor with a browser tab open.

What Ponyglot adds to django-parler

Automatic field discovery

Translated fields on your TranslatableModels are found automatically, including those of third-party apps like djangocms-stories.

Delta sync per field

Every translated field is fingerprinted. When the source changes, only the stale fields are retranslated.

Suggestions with a diff

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

Built for catalogs

Usage-based plans for apps and catalogs. Glossary and translation memory keep product terms consistent, and memory hits don't count towards your characters.

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[parler]"

# settings.py
INSTALLED_APPS += [
    "ponyglot",
    "ponyglot.contrib.parler",
]
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-parler questions

Do I have to change my models?

No. Ponyglot reads the translated fields django-parler already knows about.

Does it work with djangocms-stories?

Yes. djangocms-stories uses django-parler, and its posts share the glossary and translation memory with your django CMS pages.

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-modeltranslation

ponyglot[modeltranslation]

Per-language columns, including wagtail-modeltranslation projects.

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