mirror of https://github.com/django/django.git
Fixed #18393 -- Prevented blocktrans to crash when a variable name is badly formatted.
This commit is contained in:
parent
a535040bfa
commit
432339a72c
|
@ -148,7 +148,7 @@ class BlockTranslateNode(Node):
|
|||
context.pop()
|
||||
try:
|
||||
result = result % data
|
||||
except KeyError:
|
||||
except (KeyError, ValueError):
|
||||
with translation.override(None):
|
||||
result = self.render(context)
|
||||
return result
|
||||
|
|
Binary file not shown.
|
@ -17,5 +17,11 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: template.html:3
|
||||
# Note: Intentional: variable name is translated.
|
||||
msgid "My name is %(person)s."
|
||||
msgstr "Mon nom est %(personne)s."
|
||||
|
||||
#: template.html:3
|
||||
# Note: Intentional: the variable name is badly formatted (missing 's' at the end)
|
||||
msgid "My other name is %(person)s."
|
||||
msgstr "Mon autre nom est %(person)."
|
|
@ -270,10 +270,11 @@ class TranslationTests(TestCase):
|
|||
self.assertEqual(to_language('sr_Lat'), 'sr-lat')
|
||||
|
||||
@override_settings(LOCALE_PATHS=(os.path.join(here, 'other', 'locale'),))
|
||||
def test_bad_placeholder(self):
|
||||
def test_bad_placeholder_1(self):
|
||||
"""
|
||||
Error in translation file should not crash template rendering
|
||||
(%(person)s is translated as %(personne)s in fr.po)
|
||||
Refs #16516.
|
||||
"""
|
||||
from django.template import Template, Context
|
||||
with translation.override('fr'):
|
||||
|
@ -281,6 +282,19 @@ class TranslationTests(TestCase):
|
|||
rendered = t.render(Context({'person': 'James'}))
|
||||
self.assertEqual(rendered, 'My name is James.')
|
||||
|
||||
@override_settings(LOCALE_PATHS=(os.path.join(here, 'other', 'locale'),))
|
||||
def test_bad_placeholder_2(self):
|
||||
"""
|
||||
Error in translation file should not crash template rendering
|
||||
(%(person) misses a 's' in fr.po, causing the string formatting to fail)
|
||||
Refs #18393.
|
||||
"""
|
||||
from django.template import Template, Context
|
||||
with translation.override('fr'):
|
||||
t = Template('{% load i18n %}{% blocktrans %}My other name is {{ person }}.{% endblocktrans %}')
|
||||
rendered = t.render(Context({'person': 'James'}))
|
||||
self.assertEqual(rendered, 'My other name is James.')
|
||||
|
||||
|
||||
class FormattingTests(TestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue