Kaydet (Commit) 543df077 authored tarafından Claude Paroz's avatar Claude Paroz

Fixed #24073 -- Returned None for get_language when translations are deactivated

This fixes a regression caused by f7c287fc. Thanks Markus Holtermann
for identifying the regression.
üst d6c8121e
...@@ -211,6 +211,8 @@ def activate(language): ...@@ -211,6 +211,8 @@ def activate(language):
Fetches the translation object for a given language and installs it as the Fetches the translation object for a given language and installs it as the
current translation object for the current thread. current translation object for the current thread.
""" """
if not language:
return
if language in _DJANGO_DEPRECATED_LOCALES: if language in _DJANGO_DEPRECATED_LOCALES:
msg = ("The use of the language code '%s' is deprecated. " msg = ("The use of the language code '%s' is deprecated. "
"Please use the '%s' translation instead.") "Please use the '%s' translation instead.")
...@@ -235,6 +237,7 @@ def deactivate_all(): ...@@ -235,6 +237,7 @@ def deactivate_all():
for some reason. for some reason.
""" """
_active.value = gettext_module.NullTranslations() _active.value = gettext_module.NullTranslations()
_active.value.to_language = lambda *args: None
def get_language(): def get_language():
......
...@@ -1098,7 +1098,14 @@ For a complete discussion on the usage of the following see the ...@@ -1098,7 +1098,14 @@ For a complete discussion on the usage of the following see the
.. function:: get_language() .. function:: get_language()
Returns the currently selected language code. Returns the currently selected language code. Returns ``None`` if
translations are temporarily deactivated (by :func:`deactivate_all()` or
when ``None`` is passed to :func:`override()`).
.. versionchanged:: 1.8
Before Django 1.8, ``get_language()`` always returned
:setting:`LANGUAGE_CODE` when translations were deactivated.
.. function:: get_language_bidi() .. function:: get_language_bidi()
......
...@@ -1021,6 +1021,9 @@ Miscellaneous ...@@ -1021,6 +1021,9 @@ Miscellaneous
this will not happen any longer. It might be that new database migrations are this will not happen any longer. It might be that new database migrations are
generated (once) after migrating to 1.8. generated (once) after migrating to 1.8.
* :func:`django.utils.translation.get_language()` now returns ``None`` instead
of :setting:`LANGUAGE_CODE` when translations are temporarily deactivated.
.. _deprecated-features-1.8: .. _deprecated-features-1.8:
Features deprecated in 1.8 Features deprecated in 1.8
......
...@@ -68,7 +68,7 @@ class TranslationTests(TestCase): ...@@ -68,7 +68,7 @@ class TranslationTests(TestCase):
self.assertEqual(get_language(), 'pl') self.assertEqual(get_language(), 'pl')
self.assertEqual(get_language(), 'de') self.assertEqual(get_language(), 'de')
with translation.override(None): with translation.override(None):
self.assertEqual(get_language(), settings.LANGUAGE_CODE) self.assertEqual(get_language(), None)
self.assertEqual(get_language(), 'de') self.assertEqual(get_language(), 'de')
finally: finally:
deactivate() deactivate()
...@@ -81,7 +81,7 @@ class TranslationTests(TestCase): ...@@ -81,7 +81,7 @@ class TranslationTests(TestCase):
@translation.override(None) @translation.override(None)
def func_none(): def func_none():
self.assertEqual(get_language(), settings.LANGUAGE_CODE) self.assertEqual(get_language(), None)
try: try:
activate('de') activate('de')
......
...@@ -2,7 +2,6 @@ import os ...@@ -2,7 +2,6 @@ import os
from django.apps import apps from django.apps import apps
from django.db import connection from django.db import connection
from django.conf import settings
from django.core import management from django.core import management
from django.core.management import BaseCommand, CommandError, find_commands from django.core.management import BaseCommand, CommandError, find_commands
from django.core.management.utils import find_command, popen_wrapper from django.core.management.utils import find_command, popen_wrapper
...@@ -48,13 +47,12 @@ class CommandTests(SimpleTestCase): ...@@ -48,13 +47,12 @@ class CommandTests(SimpleTestCase):
management.ManagementUtility(['manage.py', 'dance', '--example=raise']).execute() management.ManagementUtility(['manage.py', 'dance', '--example=raise']).execute()
self.assertIn("CommandError", stderr.getvalue()) self.assertIn("CommandError", stderr.getvalue())
def test_default_en_us_locale_set(self): def test_deactivate_locale_set(self):
# Forces en_us when set to true # Deactivate translation when set to true
out = StringIO() out = StringIO()
with translation.override('pl'): with translation.override('pl'):
management.call_command('leave_locale_alone_false', stdout=out) management.call_command('leave_locale_alone_false', stdout=out)
# get_language returns settings.LANGUAGE_CODE for NullTranslations instances self.assertEqual(out.getvalue(), "")
self.assertEqual(out.getvalue(), "%s\n" % settings.LANGUAGE_CODE)
def test_configured_locale_preserved(self): def test_configured_locale_preserved(self):
# Leaves locale from settings when set to false # Leaves locale from settings when set to false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment