Строки не будут переведены в 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])
Должен быть лучший способ сделать это