Ticket #5849: blocktrans_strip.2.diff

File blocktrans_strip.2.diff, 3.4 KB (added by Dmitri Fedortchenko <zeraien@…>, 7 years ago)

Original patch could not be applied after rev 6689, this is an update.

  • django/templatetags/i18n.py

     
    7072        for var, val in self.extra_context.items():
    7173            context[var] = val.render(context)
    7274        singular, vars = self.render_token_list(self.singular)
     75        singular = translation.strip_blocktrans(singular)
    7376        if self.plural and self.countervar and self.counter:
    7477            count = self.counter.resolve(context)
    7578            context[self.countervar] = count
    7679            plural, vars = self.render_token_list(self.plural)
     80            plural = translation.strip_blocktrans(plural)
    7781            result = translation.ungettext(singular, plural, count)
    7882        else:
    7983            result = translation.ugettext(singular)
  • django/utils/translation/trans_real.py

     
    448448    inplural = False
    449449    singular = []
    450450    plural = []
     451   
     452    from django.utils.translation import strip_blocktrans
     453           
    451454    for t in Lexer(src, None).tokenize():
    452455        if intrans:
    453456            if t.token_type == TOKEN_BLOCK:
    454457                endbmatch = endblock_re.match(t.contents)
    455458                pluralmatch = plural_re.match(t.contents)
    456459                if endbmatch:
     460                    singular = strip_blocktrans(''.join(singular))
     461                   
    457462                    if inplural:
    458                         out.write(' ngettext(%r,%r,count) ' % (''.join(singular), ''.join(plural)))
     463                        plural = strip_blocktrans(''.join(plural))
     464                        out.write(' ngettext(%r,%r,count) ' % (singular, plural))
    459465                        for part in singular:
    460466                            out.write(blankout(part, 'S'))
    461467                        for part in plural:
    462468                            out.write(blankout(part, 'P'))
    463469                    else:
    464                         out.write(' gettext(%r) ' % ''.join(singular))
     470                        out.write(' gettext(%r) ' % singular)
    465471                        for part in singular:
    466472                            out.write(blankout(part, 'S'))
    467473                    intrans = False
  • django/utils/translation/__init__.py

     
    109109    """
    110110    return u''.join([force_unicode(s) for s in strings])
    111111string_concat = lazy(string_concat, unicode)
     112
     113import os,re
     114def strip_blocktrans(text):
     115    """Strip indentation from the argument based on the indentation of the first non-empty line.
     116   
     117    The returned value is stripped of trailing linebreaks and spaces."""
     118   
     119    lines = text.split(os.linesep)
     120    newlines = []
     121   
     122    firstline = lines[0]
     123    if not re.match("\w",firstline) and len(lines) > 1:
     124        firstline = lines[1]
     125       
     126    thematch = re.match('^[\t\s]+',firstline)
     127    if thematch:
     128        pos = thematch.end()
     129   
     130        for line in lines:
     131            newlines.append(re.sub("^[\t\s]{0,%d}"%pos,"",line))
     132        return os.linesep.join(newlines).strip()
     133    else:
     134        return text.strip()
Back to Top