Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #18393 -- Prevented blocktrans to crash when a variable name is…

… badly formatted.
  • Loading branch information...
commit 432339a72c20f78abf1999892a39c71b5d853174 1 parent a535040
@jphalip jphalip authored
View
2  django/templatetags/i18n.py
@@ -148,7 +148,7 @@ def render(self, context):
context.pop()
try:
result = result % data
- except KeyError:
+ except (KeyError, ValueError):
with translation.override(None):
result = self.render(context)
return result
View
BIN  tests/regressiontests/i18n/other/locale/fr/LC_MESSAGES/django.mo
Binary file not shown
View
6 tests/regressiontests/i18n/other/locale/fr/LC_MESSAGES/django.po
@@ -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)."
View
16 tests/regressiontests/i18n/tests.py
@@ -270,10 +270,11 @@ def test_to_language(self):
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 @@ def test_bad_placeholder(self):
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):
Please sign in to comment.
Something went wrong with that request. Please try again.