Fixed #22565 -- Prevented pgettext_lazy crash with bytestring input
Thanks ygbo for the report.
This commit is contained in:
parent
d1799233f4
commit
142c27218a
|
@ -314,7 +314,8 @@ def pgettext(context, message):
|
||||||
result = ugettext(msg_with_ctxt)
|
result = ugettext(msg_with_ctxt)
|
||||||
if CONTEXT_SEPARATOR in result:
|
if CONTEXT_SEPARATOR in result:
|
||||||
# Translation not found
|
# Translation not found
|
||||||
result = message
|
# force unicode, because lazy version expects unicode
|
||||||
|
result = force_text(message)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,6 @@ Bugfixes
|
||||||
|
|
||||||
* Made the ``year_lookup_bounds_for_datetime_field`` Oracle backend method
|
* Made the ``year_lookup_bounds_for_datetime_field`` Oracle backend method
|
||||||
Python 3 compatible (`#22551 <http://code.djangoproject.com/ticket/22551>`_).
|
Python 3 compatible (`#22551 <http://code.djangoproject.com/ticket/22551>`_).
|
||||||
|
|
||||||
|
* Fixed ``pgettext_lazy`` crash when receiving bytestring content on Python 2
|
||||||
|
(`#22565 <http://code.djangoproject.com/ticket/22565>`_).
|
||||||
|
|
|
@ -9,6 +9,7 @@ from importlib import import_module
|
||||||
import os
|
import os
|
||||||
import pickle
|
import pickle
|
||||||
from threading import local
|
from threading import local
|
||||||
|
from unittest import skipUnless
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.template import Template, Context
|
from django.template import Template, Context
|
||||||
|
@ -30,7 +31,7 @@ from django.utils.translation import (activate, deactivate,
|
||||||
ugettext, ugettext_lazy,
|
ugettext, ugettext_lazy,
|
||||||
ngettext_lazy,
|
ngettext_lazy,
|
||||||
ungettext_lazy,
|
ungettext_lazy,
|
||||||
pgettext,
|
pgettext, pgettext_lazy,
|
||||||
npgettext, npgettext_lazy,
|
npgettext, npgettext_lazy,
|
||||||
check_for_language,
|
check_for_language,
|
||||||
string_concat, LANGUAGE_SESSION_KEY)
|
string_concat, LANGUAGE_SESSION_KEY)
|
||||||
|
@ -94,9 +95,20 @@ class TranslationTests(TestCase):
|
||||||
s4 = ugettext_lazy('Some other string')
|
s4 = ugettext_lazy('Some other string')
|
||||||
self.assertEqual(False, s == s4)
|
self.assertEqual(False, s == s4)
|
||||||
|
|
||||||
if six.PY2:
|
@skipUnless(six.PY2, "No more bytestring translations on PY3")
|
||||||
# On Python 2, gettext_lazy should not transform a bytestring to unicode
|
def test_lazy_and_bytestrings(self):
|
||||||
|
# On Python 2, (n)gettext_lazy should not transform a bytestring to unicode
|
||||||
self.assertEqual(gettext_lazy(b"test").upper(), b"TEST")
|
self.assertEqual(gettext_lazy(b"test").upper(), b"TEST")
|
||||||
|
self.assertEqual((ngettext_lazy(b"%d test", b"%d tests") % 1).upper(), b"1 TEST")
|
||||||
|
|
||||||
|
# Other versions of lazy functions always return unicode
|
||||||
|
self.assertEqual(ugettext_lazy(b"test").upper(), "TEST")
|
||||||
|
self.assertEqual((ungettext_lazy(b"%d test", b"%d tests") % 1).upper(), "1 TEST")
|
||||||
|
self.assertEqual(pgettext_lazy(b"context", b"test").upper(), "TEST")
|
||||||
|
self.assertEqual(
|
||||||
|
(npgettext_lazy(b"context", b"%d test", b"%d tests") % 1).upper(),
|
||||||
|
"1 TEST"
|
||||||
|
)
|
||||||
|
|
||||||
def test_lazy_pickle(self):
|
def test_lazy_pickle(self):
|
||||||
s1 = ugettext_lazy("test")
|
s1 = ugettext_lazy("test")
|
||||||
|
|
Loading…
Reference in New Issue