How It Works

A look under the hood at how TranslateBot handles your translations.

Scan

Finds all .po files in your locale directories

Diff

Identifies entries with empty msgstr values

Translate

Sends batches to your chosen AI model

Write

Updates your .po files with translations

Placeholder Preservation

Django uses special placeholders for dynamic values. Breaking these crashes your app. TranslateBot keeps them intact.

Input (msgid) Welcome back, %(username)s! You have %(count)d new messages.
Output (msgstr - French) Bon retour, %(username)s ! Vous avez %(count)d nouveaux messages.
%(name)s Named string
%(count)d Named integer
%s Positional string
{0} Format index

Why Dry Run?

Before running a full translation, use --dry-run to see exactly what would be translated—without making any API calls or changes to your files.

$ python manage.py translate --target-lang nl --dry-run
ℹ️ Found 3 untranslated entries
🔍 Dry run mode: skipping LLM translation

✓ Would translate 'Welcome to our platform'
✓ Would translate 'Save changes'
✓ Would translate 'Delete account'

Dry run complete: 3 entries would be translated
No API costs
See what needs translation
No file changes

Ready to automate your translations?