Интересный вопрос, очень скоро у меня возникнет эта проблема. Я думаю, я пойду на 2, без каких-либо хитрых вещей. HTML-разметка проста, URL-адреса не будут перемещаться в ближайшее время, и если что-то будет изменено, в django.po будет создана новая запись, поэтому у нас есть возможность просмотреть перевод (например: скрипт должен проверять пустые переводы после makemessages
).
Итак, в шаблоне:
{% load i18n %}
{% trans 'hello <a href="/">world</a>' %}
... потом, после python manage.py makemessages
я вхожу в свой django.po
#: templates/out.html:3
msgid "hello <a href=\"/\">world</a>"
msgstr ""
Я изменяю это для своих нужд
#: templates/out.html:3
msgid "hello <a href=\"/\">world</a>"
msgstr "bonjour <a href=\"/\">monde</a>"
... и в простых, но частых случаях, с которыми я столкнусь, больше не будет никаких проблем. Другие решения здесь кажутся довольно умными, но я не думаю, что решение проблем разметки - это больше разметки. Кроме того, я хочу избежать слишком запутанных вещей в шаблонах.
Думаю, через некоторое время ваши шаблоны должны стать достаточно стабильными, но я не знаю, какие еще проблемы вы ожидаете. Если содержимое меняется снова и снова, возможно, место этого содержимого находится не внутри шаблона, а внутри модели.
Редактировать: я только что проверил это в документации , если вам когда-нибудь понадобятся переменные внутри перевода, есть blocktrans
.