Django Logging i18n ugettext_lazy Переменные - PullRequest
2 голосов
/ 29 мая 2011

У меня проблемы с записью выходных данных интернационализированной переменной django.

В коде моего приложения используется переменная message, и он отображается на английском и немецком языках (два языка, с которыми я работаю)

Моя проблема в том, что я пытаюсь сделать журнал вывода указанной переменной 'message'.Я хочу войти в систему на английском и / или немецком (в зависимости от того, что видит конечный пользователь)

Я использую string_concat, и он говорит:

ленивые переводы в результате будут преобразованы тольков строки, когда сам результат используется в строке (обычно во время рендеринга шаблона).

Вот пример кода:

from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat

message = _('Profile Updated OK')

# Build a log message
fmt_msg = _(message)
log_message = 'Message Sent: '
log_message = string_concat(log_message, fmt_msg)

logger.info(log_message)

Запись журнала не переведена:

Message Sent: <django.utils.functional.__proxy__ object at 0x9c3c4ac>

Кто-нибудь может подсказать, как я могу сделать так, чтобы прокси-объект переводился при использовании с ведением журнала?

В моем обычном коде Django он переводится нормально, только проблема logging.info ().1020 * Ура!

Ответы [ 2 ]

1 голос
/ 29 мая 2011

С документы :

Результат вызова ugettext_lazy() может использоваться везде, где вы будете использовать строку Unicode (объект с типом unicode) в Python. Если вы попытаетесь использовать его там, где ожидается строка байтов (объект str), все будет работать не так, как ожидалось, поскольку объект ugettext_lazy() не знает, как преобразовать себя в строку байтов.

Кроме того, не звоните _() дважды.

logger.info(u'Message Sent: %s' % message)
1 голос
/ 29 мая 2011

Вы должны форсировать строки Unicode, как описано в http://www.djangobook.com/en/2.0/chapter19/

u"Hello %s" % ugettext_lazy("people")

И не вызывать функцию дважды;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...