Skip to main content

dj-translatemessages

LLM-powered Django translations ✨ Formerly published as yesglot.

A Django app that autofills missing translations in .po files using an LLM, while respecting ICU format placeholders and source references.

Project story: The birth of yesglot.com explains the background behind yesglot and the rename to dj-translatemessages.

Why dj-translatemessages?

  • 🧠 LLM-powered: works with 100+ LLM models through LiteLLM’s unified API
  • 🔒 Placeholder-safe: keeps {name}, {{handlebars}}, URLs, and emails intact
  • 📦 Django-native: one management command: python manage.py translatemessages
  • 🧮 Cost-aware: prints per-file and total cost (via LiteLLM)
  • 🧱 Token-safe batching: automatically splits work to avoid context overflows

🚀Quick Start

Installation

pip install dj-translatemessages

Version 2.0.0 renames the Django app to dj_translatemessages. If you're upgrading from yesglot, update INSTALLED_APPS and imports accordingly. Migration steps: docs/migration_guideline.md.

Add dj_translatemessages to your Django settings:

INSTALLED_APPS = [
    # ...
    "dj_translatemessages",
]

Configuration

Set the model from 100+ LLM models and API key in your Django settings:

DJ_TRANSLATEMESSAGES_LLM_MODEL = "openai/gpt-4o-mini"
DJ_TRANSLATEMESSAGES_API_KEY = "sk-..."

Usage

A typical workflow with Django translations:

  1. Extract messages into .po files (creates entries with empty msgstr):
python manage.py makemessages -all
  1. Autofill missing translations with dj-translatemessages:
python manage.py translatemessages

Example output:

▶ Translation run started.
Using translation model: openai/gpt-4o-mini

• Language: French [fr]
  - Scanning: locale/fr/LC_MESSAGES/django.po
    Missing entries: 12. Translating…
    Filled 12 entries in 3.21s • Cost: $0.0123

============================================================
Done in 3.76s • Files: 1 • Missing found: 12 • Filled: 12 • Total cost: $0.0123
  1. Compile translations into .mo files (so Django can use them at runtime):
python manage.py compilemessages

Advanced Usage

Optional parameters,

  • DJ_TRANSLATEMESSAGES_SAFETY_MARGIN: 1000 (default)
  • DJ_TRANSLATEMESSAGES_PER_ITEM_OUTPUT: 100 (default)
  • DJ_TRANSLATEMESSAGES_LLM_MODEL_TEMPERATURE: 0 (default)

System Prompt

It is preconfigured, though you may override it to tailor the behavior of your translation.

  • DJ_TRANSLATEMESSAGES_SYSTEM_PROMPT_FUNCTION: for example, "myproject.myapp.utils.get_system_prompt"
  • DJ_TRANSLATEMESSAGES_SYSTEM_PROMPT: string

Default:

You are a professional translator. Translate into the target language.

  • Keep placeholders like {name} / {{handlebars}} unchanged.
  • Keep URLs and emails unchanged.
  • Return ONLY a JSON array of strings in the same order.

Preamble Template

It’s already configured, but you can override it to adjust how your translation behaves.

  • DJ_TRANSLATEMESSAGES_PREAMBLE_TEMPLATE_FUNCTION: for example, "myproject.myapp.utils.get_preamble"
  • DJ_TRANSLATEMESSAGES_PREAMBLE_TEMPLATE: string

Default:

Translate these items into {language}. Return ONLY a JSON array:

License

Mozilla Public License Version 2.0

dj-translatemessages Logo

Metadata

Release files for dj-translatemessages 2.0.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 dj-translatemessages 2.0.0
File Size Uploaded
dj_translatemessages-2.0.0.tar.gz 15.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dj-translatemessages 2.0.0
File Interpreter ABI Platform
dj_translatemessages-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.4 kB

Release files / dj_translatemessages-2.0.0.tar.gz

Download URL dj_translatemessages-2.0.0.tar.gz
Size 15.5 kB
Tags Source
SHA-256 checksum
How to use checksums
df8f78d20600f60973b0b55a1e74f43991088ade50c1cc4248bb1110c0852b33
BLAKE2b-256 checksum
How to use checksums
f0aed114dc5c3e7b23e382933328b4dc4fa2fd538c07be9c73bba8bc178536dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.8

Release files / dj_translatemessages-2.0.0-py3-none-any.whl

Download URL dj_translatemessages-2.0.0-py3-none-any.whl
Size 20.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce43b9a6d02bcdfe22cade8140e94d1fe89ff7b38392687f33814d8b8e13a796
BLAKE2b-256 checksum
How to use checksums
a3caf131ca98053b5cbb084166f0b9b4436e39226f24cba52de13324de324604
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.8

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

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