我使用Python 2.7版和有问题与像行: LOG.warning(_("text"))
Python/Django:ugettext_lazy函数如何与运算符%一起工作?
为LOG.warning期待一个字符串(STR)这将无法工作,ugettext_lazy只知道如何呈现的Unicode。
现在我找到的解决方法是调用记录之前强制统一渲染:
text = 'Test trans'
LOG.warning(u"%s" % _(text))
不过,我很惊讶地发现,论文的代码也工作:
LOG.warning(_(Test trans %(test)s.') % {'test': 1})
LOG.warning(_('Test trans %s.') % 1)
有人可以解释为什么? 在替换变量之前,“%”运算符是否要求unicode渲染?
在此先感谢。
所以,如果我的理解是正确的,“%” OU“ +“操作符强制unicode呈现方式与我的行LOG.warning(u”%s“%_(text))''一样。 我可以向你保证,我的记录器被正确设置为具有警告级别的“做事情”。但是,它不评估在以下情况下的懒惰字符串: '_(“text”)' 没有任何操作。 所以我其实有3个解决方案: ' U “%s的” %_(文本) _(文本).__的unicode __() ugettext(文本) ' 什么是最好的?对于日志记录过程,回到ugettext有什么不同吗?此代码仅在发生异常时执行... – user6920919
@ user6920919除非需要懒惰功能,否则我不会使用_lazy变体,并且在需要Unicode字符串和gettext时,我会调用'ugettext'一个非Unicode字符串。 – Flimm