I'm having trouble logging the output of an internationalized django variable.
My application code used the 'message' vaiable OK and it displays in English and German (the two languages I am working with)
My problem is when I try to make a log of the said 'message' variable output. I want to log in English and/or German (depending on what the end user is seeing)
I'm using string_concat and it says:
the lazy translations in result will only be converted to strings when result itself is used in a string (usually at template rendering time).
Here is a code sample:
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)
The log entry is not translated:
Message Sent: <django.utils.functional.__proxy__ object at 0x9c3c4ac>
Can anyone suggest ho开发者_高级运维w I can have the proxy object to be translated when used with logging?
It's translating OK in my regular Django code just the logging.info() issue.
Cheers!
From the docs:
The result of a
ugettext_lazy()
call can be used wherever you would use a unicode string (an object with typeunicode
) in Python. If you try to use it where a bytestring (astr
object) is expected, things will not work as expected, since augettext_lazy()
object doesn't know how to convert itself to a bytestring.
Also, don't call _()
twice.
logger.info(u'Message Sent: %s' % message)
You have to force Unicode strings, as documented in http://www.djangobook.com/en/2.0/chapter19/
u"Hello %s" % ugettext_lazy("people")
And do not call the function twice ;)
精彩评论