diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index 9433ad897f..e8601efc2f 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -102,6 +102,21 @@ def activate(language): def deactivate(): return _trans.deactivate() +class override(object): + def __init__(self, language, deactivate=False): + self.language = language + self.deactivate = deactivate + self.old_language = get_language() + + def __enter__(self): + activate(self.language) + + def __exit__(self, exc_type, exc_value, traceback): + if self.deactivate: + deactivate() + else: + activate(self.old_language) + def get_language(): return _trans.get_language() diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py index 2a7f0c2841..8a8e4dc430 100644 --- a/tests/regressiontests/i18n/tests.py +++ b/tests/regressiontests/i18n/tests.py @@ -8,6 +8,7 @@ from threading import local from django.conf import settings from django.template import Template, Context +from django.test import TestCase from django.utils.formats import (get_format, date_format, time_format, localize, localize_input, iter_format_modules, get_format_modules) from django.utils.importlib import import_module @@ -28,6 +29,13 @@ from test_warnings import DeprecationWarningTests class TranslationTests(TestCase): + def test_override(self): + activate('de') + with translation.override('pl'): + self.assertEqual(get_language(), 'pl') + self.assertEqual(get_language(), 'de') + deactivate() + def test_lazy_objects(self): """ Format string interpolation should work with *_lazy objects.