2011-05-29 72 views
2

我無法記錄國際化的django變量的輸出。Django日誌記錄i18n ugettext_lazy變量

我的應用程序代碼中使用的「消息」 vaiable確定,它在英語和德語(兩種語言,我有工作)

我的問題是,當我嘗試做一個日誌中說:「消息顯示 '可變輸出。 我想登錄的英語和/或德語(這取決於最終用戶正在觀看)

我使用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()問題。

乾杯!

回答

1

the docs

的結果ugettext_lazy()調用可以用在任何你會使用unicode字符串(類型爲的對象)在Python中。如果您嘗試使用它,其中一個字節串(一個str對象)預計,隨着預期的事情將無法正常工作,因爲ugettext_lazy()對象不知道如何將其轉換爲字節字符串。

此外,請不要撥打_()兩次。

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

您必須強制Unicode字符串,如記錄在http://www.djangobook.com/en/2.0/chapter19/

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

而且不要調用函數兩次)

+0

'消息發送時間:' 不需要翻譯。 string_concat會將常規字符串連接到惰性翻譯對象。 – Jacob 2011-05-29 11:22:09

+0

槽糕..我只是重新啓動我的Django開發服務器,我已經發布的代碼似乎正常工作。不知道我做錯了什麼,但現在沒問題。爲浪費時間道歉。謝謝! – Jacob 2011-05-29 11:24:08

+0

Ows ...沒有抱歉..它不工作。 (對不起週日晚在這裏晚點)。它翻譯在渲染到HTML只是沒有日誌代碼確定。 – Jacob 2011-05-29 11:26:55