[1.9.x] Fixed #25720 -- Made gettext() return bytestring on Python 2 if input is bytestring.
This is consistent with the behavior of Django 1.7.x and earlier.
Backport of d3e3703a15
from master
This commit is contained in:
parent
b2e12ea813
commit
1eed16b9db
|
@ -103,6 +103,7 @@ class DjangoTranslation(gettext_module.GNUTranslations):
|
||||||
def __init__(self, language):
|
def __init__(self, language):
|
||||||
"""Create a GNUTranslations() using many locale directories"""
|
"""Create a GNUTranslations() using many locale directories"""
|
||||||
gettext_module.GNUTranslations.__init__(self)
|
gettext_module.GNUTranslations.__init__(self)
|
||||||
|
self.set_output_charset('utf-8') # For Python 2 gettext() (#25720)
|
||||||
|
|
||||||
self.__language = language
|
self.__language = language
|
||||||
self.__to_language = to_language(language)
|
self.__to_language = to_language(language)
|
||||||
|
|
|
@ -27,3 +27,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed a data loss possibility with :class:`~django.db.models.Prefetch` if
|
* Fixed a data loss possibility with :class:`~django.db.models.Prefetch` if
|
||||||
``to_attr`` is set to a ``ManyToManyField`` (:ticket:`25693`).
|
``to_attr`` is set to a ``ManyToManyField`` (:ticket:`25693`).
|
||||||
|
|
||||||
|
* Fixed a regression in 1.8 by making ``gettext()`` once again return UTF-8
|
||||||
|
bytestrings on Python 2 if the input is a bytestring (:ticket:`25720`).
|
||||||
|
|
|
@ -143,6 +143,18 @@ class TranslationTests(SimpleTestCase):
|
||||||
s4 = ugettext_lazy('Some other string')
|
s4 = ugettext_lazy('Some other string')
|
||||||
self.assertNotEqual(s, s4)
|
self.assertNotEqual(s, s4)
|
||||||
|
|
||||||
|
@skipUnless(six.PY2, "No more bytestring translations on PY3")
|
||||||
|
def test_bytestrings(self):
|
||||||
|
"""gettext() returns a bytestring if input is bytestring."""
|
||||||
|
|
||||||
|
# Using repr() to check translated text and type
|
||||||
|
self.assertEqual(repr(gettext(b"Time")), repr(b"Time"))
|
||||||
|
self.assertEqual(repr(gettext("Time")), repr("Time"))
|
||||||
|
|
||||||
|
with translation.override('de', deactivate=True):
|
||||||
|
self.assertEqual(repr(gettext(b"Time")), repr(b"Zeit"))
|
||||||
|
self.assertEqual(repr(gettext("Time")), repr(b"Zeit"))
|
||||||
|
|
||||||
@skipUnless(six.PY2, "No more bytestring translations on PY3")
|
@skipUnless(six.PY2, "No more bytestring translations on PY3")
|
||||||
def test_lazy_and_bytestrings(self):
|
def test_lazy_and_bytestrings(self):
|
||||||
# On Python 2, (n)gettext_lazy should not transform a bytestring to unicode
|
# On Python 2, (n)gettext_lazy should not transform a bytestring to unicode
|
||||||
|
|
Loading…
Reference in New Issue