Ticket #5972: trans_understands_filter_alternate_version.diff

File trans_understands_filter_alternate_version.diff, 2.0 KB (added by Dmitri Fedortchenko <zeraien@…>, 8 years ago)
  • django/templatetags/i18n.py

     
    3434        return ''
    3535
    3636class 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
    3939        self.noop = noop
    4040
    4141    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)
    4749
    4850class BlockTranslateNode(Node):
    4951    def __init__(self, extra_context, singular, plural=None, countervar=None,
     
    171173    class TranslateParser(TokenParser):
    172174        def top(self):
    173175            value = self.value()
     176
     177            if value[0] == "'" and value[-1] == "'":
     178                # FilterExpression does not support single-quoted strings, so we "fix" it,
     179                # in order to maintain backwards compatibility with existing
     180                # uses of ``trans`` where single quote use is supported.
     181                value = value.replace("'",'"')
     182               
    174183            if self.more():
    175184                if self.tag() == 'noop':
    176185                    noop = True
     
    180189                noop = False
    181190            return (value, noop)
    182191    value, noop = TranslateParser(token.contents).top()
    183     return TranslateNode(value, noop)
     192    return TranslateNode(parser.compile_filter(value), noop)
    184193
    185194def do_block_translate(parser, token):
    186195    """
Back to Top