localize.dev

Documenti / Django

Traduzione automatizzata dei template Django

Incapsula il testo fisso nei template Django nei tag translate e blocktranslate, compila i cataloghi .po di gettext e attiva LocaleMiddleware, in un unico comando o pull request.

Come funziona

Il testo normale diventa {% translate "…" %}; il testo con variabili diventa {% blocktranslate with name=user.name %}…{% endblocktranslate %}, e {% load i18n %} viene aggiunto dopo {% extends %}.

I plurali scritti alla maniera di Django, {{ n }} item{{ n|pluralize }}, diventano {% blocktranslate count count=n %}…{% plural %}…{% endblocktranslate %} con msgid_plural e una forma per ogni slot Plural-Forms.

Le traduzioni vanno direttamente in locale/<lang>/LC_MESSAGES/django.po, indicizzate dal testo sorgente come farebbe makemessages: le voci esistenti vengono mantenute, quelle vuote riempite e quelle nuove aggiunte. Esegui compilemessages per costruirle. (Il catalogo sottostante proviene dall'esempio offline, quindi le sue traduzioni sono vuote.)

Prima e dopo

L'output effettivo del motore per questo file. In un'esecuzione reale, il modello ospitato nomina le chiavi dal contesto.

shop/templates/shop/cart.html · prima
{% extends "base.html" %}
{% block content %}
<h1>Hi {{ user.first_name }}, welcome back</h1>
<input placeholder="Search products">
{% endblock %}
shop/templates/shop/cart.html · dopo
{% extends "base.html" %}
{% load i18n %}
{% block content %}
<h1>{% blocktranslate with first_name=user.first_name %}Hi {{ first_name }}, welcome back{% endblocktranslate %}</h1>
<input placeholder="{% translate 'Search products' %}">
{% endblock %}
locale/es/LC_MESSAGES/django.po
msgid ""
msgstr ""
"Project-Id-Version: app\n"
"PO-Revision-Date: 2026-11-11 19:53+0000\n"
"Last-Translator: localize.dev <https://uselocalize.dev>\n"
"Language-Team: Spanish\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

msgid "Hi %(first_name)s, welcome back"
msgstr ""

msgid "Search products"
msgstr ""

Cosa aggiunge la configurazione

La prima esecuzione imposta I18n di Django (gettext) se il progetto non lo ha ancora:

  • USE_I18N = True, LANGUAGES e LOCALE_PATHS nelle impostazioni
  • LocaleMiddleware dopo il middleware di sessione

Eseguilo

La CLI richiede Node.js 22 o versioni successive, nient'altro: npx lo esegue senza aggiungere un package.json al progetto. Non hai Node sulla tua macchina? La GitHub Action qui sotto lo esegue per te.

npx localize-dev login

# Preview, then write the changes
npx localize-dev run --dry-run -l es,fr,de
npx localize-dev run -l es,fr,de

# Or open a pull request instead
npx localize-dev pr -l es,fr,de

Oppure aggiungi la GitHub Action e ottieni una pull request a ogni push. Provalo prima sul tuo codice nel playground.