Skip to content

Commit

Permalink
Fixed #4713 -- Fixed handling of _() in template tag arguments. Based on
Browse files Browse the repository at this point in the history
patched from Indy and SmileyChris.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@6679 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
malcolmt committed Nov 17, 2007
1 parent d0f3c43 commit 0b0ef3f
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
14 changes: 11 additions & 3 deletions django/template/__init__.py
Expand Up @@ -678,6 +678,7 @@ def __init__(self, var):
self.var = var
self.literal = None
self.lookups = None
self.translate = False

try:
# First try to treat this variable as a number.
Expand All @@ -698,11 +699,15 @@ def __init__(self, var):

except ValueError:
# 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
# we're also dealing with a literal.
if var[0] in "\"'" and var[0] == var[-1]:
self.literal = var[1:-1]

else:
# Otherwise we'll set self.lookups so that resolve() knows we're
# dealing with a bonafide variable
Expand All @@ -712,10 +717,13 @@ def resolve(self, context):
"""Resolve this variable against a given context."""
if self.lookups is not None:
# We're dealing with a variable that needs to be resolved
return self._resolve_lookup(context)
value = self._resolve_lookup(context)
else:
# 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):
return "<%s: %r>" % (self.__class__.__name__, self.var)
Expand Down
4 changes: 3 additions & 1 deletion tests/regressiontests/templates/tests.py
Expand Up @@ -734,8 +734,10 @@ def get_template_tests(self):
# 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'),

# translation of a constant string
# translation of constant strings
'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 ###################################

Expand Down

0 comments on commit 0b0ef3f

Please sign in to comment.