diff options
| author | Mike Hansen <mike@rover.com> | 2019-06-21 09:41:01 -0700 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-18 13:15:38 +0100 |
| commit | d291c72bf24387e4abe8d9883ebe9c69abdd26d0 (patch) | |
| tree | 72bd9196d31c4cdecaae59d02a30217c4d87718a /django | |
| parent | 70d95682b1be6a85abdeaea0205a897f7530f8bc (diff) | |
Fixed #30585 -- Added {% translate %} and {% blocktranslate %} template tags.
Diffstat (limited to 'django')
| -rw-r--r-- | django/templatetags/i18n.py | 19 | ||||
| -rw-r--r-- | django/utils/translation/template.py | 8 |
2 files changed, 16 insertions, 11 deletions
diff --git a/django/templatetags/i18n.py b/django/templatetags/i18n.py index d83c8c525d..5618c88bd4 100644 --- a/django/templatetags/i18n.py +++ b/django/templatetags/i18n.py @@ -98,7 +98,8 @@ class TranslateNode(Node): class BlockTranslateNode(Node): def __init__(self, extra_context, singular, plural=None, countervar=None, - counter=None, message_context=None, trimmed=False, asvar=None): + counter=None, message_context=None, trimmed=False, asvar=None, + tag_name='blocktranslate'): self.extra_context = extra_context self.singular = singular self.plural = plural @@ -107,6 +108,7 @@ class BlockTranslateNode(Node): self.message_context = message_context self.trimmed = trimmed self.asvar = asvar + self.tag_name = tag_name def render_token_list(self, tokens): result = [] @@ -163,8 +165,8 @@ class BlockTranslateNode(Node): if nested: # Either string is malformed, or it's a bug raise TemplateSyntaxError( - "'blocktrans' is unable to format string returned by gettext: %r using %r" - % (result, data) + '%r is unable to format string returned by gettext: %r ' + 'using %r' % (self.tag_name, result, data) ) with translation.override(None): result = self.render(context, nested=True) @@ -313,6 +315,7 @@ def do_get_current_language_bidi(parser, token): return GetCurrentLanguageBidiNode(args[2]) +@register.tag("translate") @register.tag("trans") def do_translate(parser, token): """ @@ -406,6 +409,7 @@ def do_translate(parser, token): return TranslateNode(message_string, noop, asvar, message_context) +@register.tag("blocktranslate") @register.tag("blocktrans") def do_block_translate(parser, token): """ @@ -513,19 +517,20 @@ def do_block_translate(parser, token): break if countervar and counter: if token.contents.strip() != 'plural': - raise TemplateSyntaxError("'blocktrans' doesn't allow other block tags inside it") + raise TemplateSyntaxError("%r doesn't allow other block tags inside it" % bits[0]) while parser.tokens: token = parser.next_token() if token.token_type in (TokenType.VAR, TokenType.TEXT): plural.append(token) else: break - if token.contents.strip() != 'endblocktrans': - raise TemplateSyntaxError("'blocktrans' doesn't allow other block tags (seen %r) inside it" % token.contents) + end_tag_name = 'end%s' % bits[0] + if token.contents.strip() != end_tag_name: + raise TemplateSyntaxError("%r doesn't allow other block tags (seen %r) inside it" % (bits[0], token.contents)) return BlockTranslateNode(extra_context, singular, plural, countervar, counter, message_context, trimmed=trimmed, - asvar=asvar) + asvar=asvar, tag_name=bits[0]) @register.tag diff --git a/django/utils/translation/template.py b/django/utils/translation/template.py index 979ae1ade6..fee66dac9a 100644 --- a/django/utils/translation/template.py +++ b/django/utils/translation/template.py @@ -19,15 +19,15 @@ def blankout(src, char): context_re = _lazy_re_compile(r"""^\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?'))\s*""") inline_re = _lazy_re_compile( - # Match the trans 'some text' part - r"""^\s*trans\s+((?:"[^"]*?")|(?:'[^']*?'))""" + # Match the trans/translate 'some text' part. + r"""^\s*trans(?:late)?\s+((?:"[^"]*?")|(?:'[^']*?'))""" # Match and ignore optional filters r"""(?:\s*\|\s*[^\s:]+(?::(?:[^\s'":]+|(?:"[^"]*?")|(?:'[^']*?')))?)*""" # Match the optional context part r"""(\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?')))?\s*""" ) -block_re = _lazy_re_compile(r"""^\s*blocktrans(\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?')))?(?:\s+|$)""") -endblock_re = _lazy_re_compile(r"""^\s*endblocktrans$""") +block_re = _lazy_re_compile(r"""^\s*blocktrans(?:late)?(\s+.*context\s+((?:"[^"]*?")|(?:'[^']*?')))?(?:\s+|$)""") +endblock_re = _lazy_re_compile(r"""^\s*endblocktrans(?:late)?$""") plural_re = _lazy_re_compile(r"""^\s*plural$""") constant_re = _lazy_re_compile(r"""_\(((?:".*?")|(?:'.*?'))\)""") |
