localize.dev

Dokumentation / Django

Django-Vorlagen-Übersetzung, automatisiert

Umwickeln Sie fest codierten Text in Django-Vorlagen mit translate- und blocktranslate-Tags, füllen Sie die gettext .po-Kataloge und aktivieren Sie LocaleMiddleware – alles in einem Befehl oder Pull Request.

Funktionsweise

Einfacher Text wird zu {% translate "…" %}; Text mit Variablen wird zu {% blocktranslate with name=user.name %}…{% endblocktranslate %}, und {% load i18n %} wird nach {% extends %} hinzugefügt.

Pluralformen nach Django-Standard, {{ n }} item{{ n|pluralize }}, werden zu {% blocktranslate count count=n %}…{% plural %}…{% endblocktranslate %} mit msgid_plural und einer Form pro Plural-Forms-Slot.

Übersetzungen gehen direkt in locale/<lang>/LC_MESSAGES/django.po, sortiert nach dem Quelltext wie makemessages: Bestehende Einträge bleiben erhalten, leere werden gefüllt und neue angehängt. Führen Sie compilemessages aus, um sie zu erstellen. (Der unten stehende Katalog stammt aus dem Offline-Beispiel und enthält daher keine Übersetzungen.)

Vorher und nachher

Die tatsächliche Ausgabe der Engine für diese Datei. Bei einer echten Ausführung benennt das gehostete Modell die Schlüssel anhand des Kontexts.

shop/templates/shop/cart.html · vorher
{% extends "base.html" %}
{% block content %}
<h1>Hi {{ user.first_name }}, welcome back</h1>
<input placeholder="Search products">
{% endblock %}
shop/templates/shop/cart.html · nachher
{% 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 ""

Was das Setup hinzufügt

Der erste Durchlauf richtet Django i18n (gettext) ein, falls das Projekt es noch nicht hat:

  • USE_I18N = True, LANGUAGES und LOCALE_PATHS in den Einstellungen
  • LocaleMiddleware nach dem Session-Middleware

Ausführen

Die CLI benötigt Node.js 22 oder neuer, sonst nichts: npx führt es aus, ohne ein package.json zum Projekt. Kein Node auf Ihrem Rechner? Die GitHub Action unten führt es für Sie aus.

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

Oder fügen Sie die GitHub Action und erhalten Sie bei jedem Push einen Pull Request. Probieren Sie es zuerst mit Ihrem eigenen Code im Spielbereich.