Ticket #5972: trans_understands_filter_alternate_version.2.diff
File trans_understands_filter_alternate_version.2.diff, 2.2 KB (added by , 17 years ago) |
---|
-
django/templatetags/i18n.py
34 34 return '' 35 35 36 36 class TranslateNode(Node): 37 def __init__(self, value, noop):38 self. value = Variable(value)37 def __init__(self, filter_expression, noop): 38 self.filter_expression = filter_expression 39 39 self.noop = noop 40 40 41 41 def render(self, context): 42 value = self.value.resolve(context) 43 if self.noop: 44 return value 45 else: 46 return translation.ugettext(value) 42 43 if not self.noop: 44 filter_expression = self.filter_expression.var.resolve(context) 45 translated = translation.ugettext(filter_expression) 46 self.filter_expression.var = Variable('"'+translated+'"') 47 # Filters are applied here, since this is a FilterExpression 48 return self.filter_expression.resolve(context) 47 49 48 50 class BlockTranslateNode(Node): 49 51 def __init__(self, extra_context, singular, plural=None, countervar=None, … … 171 173 class TranslateParser(TokenParser): 172 174 def top(self): 173 175 value = self.value() 176 177 # Backwards Compatiblity fix: 178 # FilterExpression does not support single-quoted strings, 179 # so we make a cheap localized fix in order to maintain 180 # backwards compatibility with existing uses of ``trans`` 181 # where single quote use is supported. 182 if value[0] == "'": 183 pos = None 184 m = re.match("^'([^']+)'(\|.*$)",value) 185 if m: 186 value = '"%s"%s' % (m.group(1),m.group(2)) 187 elif value[-1] == "'": 188 value = '"%s"' % value[1:-1] 189 174 190 if self.more(): 175 191 if self.tag() == 'noop': 176 192 noop = True … … 180 196 noop = False 181 197 return (value, noop) 182 198 value, noop = TranslateParser(token.contents).top() 183 return TranslateNode( value, noop)199 return TranslateNode(parser.compile_filter(value), noop) 184 200 185 201 def do_block_translate(parser, token): 186 202 """