summaryrefslogtreecommitdiff
path: root/django/newforms/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/newforms/util.py')
-rw-r--r--django/newforms/util.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/django/newforms/util.py b/django/newforms/util.py
index 51a8efdde2..f98027c2e3 100644
--- a/django/newforms/util.py
+++ b/django/newforms/util.py
@@ -1,11 +1,20 @@
from django.conf import settings
from django.utils.html import escape
+from django.utils.functional import Promise, lazy
# Converts a dictionary to a single string with key="value", XML-style with
# a leading space. Assumes keys do not need to be XML-escaped.
flatatt = lambda attrs: u''.join([u' %s="%s"' % (k, escape(v)) for k, v in attrs.items()])
def smart_unicode(s):
+ if isinstance(s, Promise):
+ # The input is something from gettext_lazy or similar. We don't want to
+ # translate it until render time, so defer the conversion.
+ return smart_unicode_lazy(s)
+ else:
+ return smart_unicode_immediate(s)
+
+def smart_unicode_immediate(s):
if not isinstance(s, basestring):
if hasattr(s, '__unicode__'):
s = unicode(s)
@@ -15,6 +24,8 @@ def smart_unicode(s):
s = unicode(s, settings.DEFAULT_CHARSET)
return s
+smart_unicode_lazy = lazy(smart_unicode_immediate, unicode)
+
class StrAndUnicode(object):
"""
A class whose __str__ returns its __unicode__ as a bytestring