Fixed #4713 -- Fixed handling of _() in template tag arguments. Based on
patched from Indy and SmileyChris. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6679 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
d0f3c4386e
commit
0b0ef3f0c5
|
@ -678,6 +678,7 @@ class Variable(object):
|
||||||
self.var = var
|
self.var = var
|
||||||
self.literal = None
|
self.literal = None
|
||||||
self.lookups = None
|
self.lookups = None
|
||||||
|
self.translate = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# First try to treat this variable as a number.
|
# First try to treat this variable as a number.
|
||||||
|
@ -698,11 +699,15 @@ class Variable(object):
|
||||||
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# A ValueError means that the variable isn't a number.
|
# A ValueError means that the variable isn't a number.
|
||||||
|
if var.startswith('_(') and var.endswith(')'):
|
||||||
|
# The result of the lookup should be translated at rendering
|
||||||
|
# time.
|
||||||
|
self.translate = True
|
||||||
|
var = var[2:-1]
|
||||||
# If it's wrapped with quotes (single or double), then
|
# If it's wrapped with quotes (single or double), then
|
||||||
# we're also dealing with a literal.
|
# we're also dealing with a literal.
|
||||||
if var[0] in "\"'" and var[0] == var[-1]:
|
if var[0] in "\"'" and var[0] == var[-1]:
|
||||||
self.literal = var[1:-1]
|
self.literal = var[1:-1]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Otherwise we'll set self.lookups so that resolve() knows we're
|
# Otherwise we'll set self.lookups so that resolve() knows we're
|
||||||
# dealing with a bonafide variable
|
# dealing with a bonafide variable
|
||||||
|
@ -712,10 +717,13 @@ class Variable(object):
|
||||||
"""Resolve this variable against a given context."""
|
"""Resolve this variable against a given context."""
|
||||||
if self.lookups is not None:
|
if self.lookups is not None:
|
||||||
# We're dealing with a variable that needs to be resolved
|
# We're dealing with a variable that needs to be resolved
|
||||||
return self._resolve_lookup(context)
|
value = self._resolve_lookup(context)
|
||||||
else:
|
else:
|
||||||
# We're dealing with a literal, so it's already been "resolved"
|
# We're dealing with a literal, so it's already been "resolved"
|
||||||
return self.literal
|
value = self.literal
|
||||||
|
if self.translate:
|
||||||
|
return _(value)
|
||||||
|
return value
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<%s: %r>" % (self.__class__.__name__, self.var)
|
return "<%s: %r>" % (self.__class__.__name__, self.var)
|
||||||
|
|
|
@ -734,8 +734,10 @@ class Templates(unittest.TestCase):
|
||||||
# usage of the get_available_languages tag
|
# usage of the get_available_languages tag
|
||||||
'i18n12': ('{% load i18n %}{% get_available_languages as langs %}{% for lang in langs %}{% ifequal lang.0 "de" %}{{ lang.0 }}{% endifequal %}{% endfor %}', {}, 'de'),
|
'i18n12': ('{% load i18n %}{% get_available_languages as langs %}{% for lang in langs %}{% ifequal lang.0 "de" %}{{ lang.0 }}{% endifequal %}{% endfor %}', {}, 'de'),
|
||||||
|
|
||||||
# translation of a constant string
|
# translation of constant strings
|
||||||
'i18n13': ('{{ _("Page not found") }}', {'LANGUAGE_CODE': 'de'}, 'Seite nicht gefunden'),
|
'i18n13': ('{{ _("Page not found") }}', {'LANGUAGE_CODE': 'de'}, 'Seite nicht gefunden'),
|
||||||
|
'i18n14': ('{% cycle "foo" _("Password") _(\'Password\') as c %} {% cycle c %} {% cycle c %}', {'LANGUAGE_CODE': 'de'}, 'foo Passwort Passwort'),
|
||||||
|
'i18n15': ('{{ absent|default:_("Password") }}', {'LANGUAGE_CODE': 'de', 'absent': ""}, 'Passwort'),
|
||||||
|
|
||||||
### HANDLING OF TEMPLATE_STRING_IF_INVALID ###################################
|
### HANDLING OF TEMPLATE_STRING_IF_INVALID ###################################
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue