Django记录i18n ugettext_lazy变量

时间:2011-05-29 11:13:04

标签: django logging internationalization

我无法记录国际化django变量的输出。

我的应用程序代码使用了'message'vaiable OK并显示 用英语和德语(我正在使用的两种语言)

我的问题是当我尝试记录所述'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()问题上进行了翻译。

干杯!

2 个答案:

答案 0 :(得分:1)

您必须强制使用Unicode字符串,如http://www.djangobook.com/en/2.0/chapter19/

中所述

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

不要再调用该函数两次;)

答案 1 :(得分:1)

来自the docs

  

ugettext_lazy()调用的结果可以在Python中使用unicode字符串(类型为unicode的对象)的任何地方使用。如果你试图在需要bytestring(一个str对象)的地方使用它,事情将无法正常工作,因为ugettext_lazy()对象不知道如何将自身转换为字节串。

另外,请勿两次致电_()

logger.info(u'Message Sent: %s' % message)