summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorMike Hansen <mike@rover.com>2019-06-21 09:41:01 -0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-12-18 13:15:38 +0100
commitd291c72bf24387e4abe8d9883ebe9c69abdd26d0 (patch)
tree72bd9196d31c4cdecaae59d02a30217c4d87718a /django
parent70d95682b1be6a85abdeaea0205a897f7530f8bc (diff)
Fixed #30585 -- Added {% translate %} and {% blocktranslate %} template tags.
Diffstat (limited to 'django')
-rw-r--r--django/templatetags/i18n.py19
-rw-r--r--django/utils/translation/template.py8
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"""_\(((?:".*?")|(?:'.*?'))\)""")