Строки не будут переведены в Django, используя функцию формата, доступную в Python 2.7

Создает ли новый и рекомендуемый способ форматирования строк, доступных в Python 2.7 с помощью format, в несвязанной строке в Django?

Строки находятся в файле .po, переведенном, но он не будет переведен на веб-сайт. Например:

from django.utils.translation import ugettext as _

website_name = "Stackoverflow"
title = _(u"{sitename} is a good website".format(sitename=website_name))

Файл .po после перевода строки выглядит следующим образом:

#: path/to/file.py:4
msgid "{sitename} is a good website"
msgstr "{sitename} ist eine gute Website"

После запуска django-admin.py compilemessages и перезапуска веб-сервера на обрабатываемой HTML-странице он все еще находится на английском языке, а все остальные строки переводятся. Кроме того, хотя все строки, использующие format, не переводятся, строки, отформатированные с использованием оператора %, переводится как ожидалось. Это также не проблема gettext/ugettext, так как проблема одинакова для обеих функций.

Ответ 1

compilemessages видит строку как "{sitename} - хороший веб-сайт", но когда приложение работает, строка на самом деле, например, "MySite - хороший сайт", который, конечно же, не имеет перевода. Сначала вы должны перенести голую строку, а затем вы можете выполнять операции с шаблоном.

Ответ 2

У меня была такая же проблема, поэтому я сначала перевел текст, а затем добавил динамический контент, например

title = _(u"is a good website")
title = " ".join([website_name, title])

Должен быть лучший способ сделать это