summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/utils/translation/__init__.py15
-rw-r--r--tests/regressiontests/i18n/tests.py8
2 files changed, 23 insertions, 0 deletions
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.