efe/yesglot

LLM-powered Django translations ✨ Just call me "python manage.py translatemessages"

django
i18n
translation

yesglot

LLM-powered Django translations ✨

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

Why yesglot?

  • 🧠 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 yesglot

Add yesglot to your Django settings:

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

Configuration

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

YESGLOT_LLM_MODEL = "openai/gpt-4o-mini"
YESGLOT_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 yesglot:
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

Advantage Usage

Optional parameters,

  • YESGLOT_SAFETY_MARGIN: 1000 (default)
  • YESGLOT_PER_ITEM_OUTPUT: 100 (default)
  • YESGLOT_LLM_MODEL_TEMPERATURE: 0 (default)

System Prompt

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

  • SYSTEM_PROMPT_FUNCTION: for example, "myproject.myapp.utils.get_system_prompt"
  • 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.

  • PREAMBLE_TEMPLATE_FUNCTION: for example, "myproject.myapp.utils.get_preamble"
  • PREAMBLE_TEMPLATE: string

Default:

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

License

Mozilla Public License Version 2.0

Yesglot Logo

Stars
99
1.01% more than last month
Forks
3
Open Issues
12