我使用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