私のpython 2.7を使用してのような行で問題があったのです: LOG.warning(_("text"))
Python/Django:演算子%でugettext_lazy関数を正確に動作させる方法は?
LOG.warningは、文字列(STR)を期待しているように、これは動作しませんとugettext_lazyはUnicodeのみをレンダリングする方法を知っています。
今、私が見つけた解決策は、ロガーを呼び出す前に、Unicodeのレンダリングを強制することでした:
LOG.warning(_(Test trans %(test)s.') % {'test': 1})
LOG.warning(_('Test trans %s.') % 1)
誰かが理由を説明することができます:
text = 'Test trans'
LOG.warning(u"%s" % _(text))
は、しかし、私は論文のコードも働くことに気づいて驚きました? 変数を置き換える前に、 "%"演算子がユニコードのレンダリングを要求していますか?
ありがとうございます。
よりもはるかに明確かつ一般的に従うことは簡単ですので、私の理解が正しければ、「%」のou " + "演算子は、私の行' LOG.warning(u "%s"%_(text)) 'と同じようにUnicodeの表示を強制します。 私のロガーは警告レベルで「やるべきこと」をするように適切に設定されています。しかし、それ以上の操作がなくても、 '_(" text ")' の場合は、遅延文字列を評価しません。 だから私は実際には3つの解決策があります。最高のだろう何 ' U "%s" は%_(テキスト) _(テキスト).__ユニコード__() ugettext(テキスト) ' を?ロギングプロセスの場合、それはugettextに戻るのに違いがありますか?このコードは、例外が発生したときにのみ実行されます... – user6920919
@ user6920919怠惰な機能を必要としない限り_lazyバリアントは使用しません。必要なときにUnicode文字列とgettextが必要なときに 'ugettext'を呼び出します非Unicode文字列です。 – Flimm