id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 4292,[unicode] django.utils.functional.lazy can't decorate functions with unicode results,Ivan Sagalaev ,Malcolm Tredinnick,"Currently the admin page showing, say, a user object is broken for Russian translation. I've traced the reason -- a leaky abstraction of a lazy proxy object. The proxy object created by 'lazy' should pretend to be an object of type returned by a decorated function. And this should work: {{{ ugettext = lazy(ugettext, unicode) s = ugettext(...) # a proxy object pretending to be a unicode instance s = unicode(s) }}} But it doesn't work because unicode(s) checks: 1. if s is an instance of unicode (it isn't) 2. if s has {{{__unicode__}}} (it doesn't) 3. if s has {{{__str___}}}, which it does (! unicode object itself has it) Then it calls {{{__str__}}} on unicode object and it breaks for non-ascii characters. I've created a fix but it seems a bit fragile because it creates a special case for unicode objects in lazy proxies. P.S. The patch also contains two str -> smart_unicode conversions that don't strictly belong here but they are required for the testcase to work.",,closed,Translations,other branch,,fixed,unicode,Maniac@…,Accepted,0,0,0,0,0,0