我无法记录国际化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()问题上进行了翻译。
干杯!
答案 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)