diff --git a/docs/topics/i18n/translation.txt b/docs/topics/i18n/translation.txt index c632c41920..5db4a34478 100644 --- a/docs/topics/i18n/translation.txt +++ b/docs/topics/i18n/translation.txt @@ -1921,6 +1921,8 @@ Here's example HTML template code: In this example, Django looks up the URL of the page to which the user will be redirected in the ``redirect_to`` context variable. +.. _explicitly-setting-the-active-language: + Explicitly setting the active language -------------------------------------- diff --git a/docs/topics/testing/tools.txt b/docs/topics/testing/tools.txt index 1473f06f6a..d6dd7b254f 100644 --- a/docs/topics/testing/tools.txt +++ b/docs/topics/testing/tools.txt @@ -570,6 +570,44 @@ can access these properties as part of a test condition. session['somekey'] = 'test' session.save() +Setting the language +-------------------- + +When testing applications that support internationalization and localization, +you might want to set the language for a test client request. The method for +doing so depends on whether or not the +:class:`~django.middleware.locale.LocaleMiddleware` is enabled. + +If the middleware is enabled, the language can be set by creating a cookie with +a name of :setting:`LANGUAGE_COOKIE_NAME` and a value of the language code:: + + from django.conf import settings + + def test_language_using_cookie(self): + self.client.cookies.load({settings.LANGUAGE_COOKIE_NAME: 'fr'}) + response = self.client.get('/') + self.assertEqual(response.content, b"Bienvenue sur mon site.") + +or by including the ``Accept-Language`` HTTP header in the request:: + + def test_language_using_header(self): + response = self.client.get('/', HTTP_ACCEPT_LANGUAGE='fr') + self.assertEqual(response.content, b"Bienvenue sur mon site.") + +More details are in :ref:`how-django-discovers-language-preference`. + +If the middleware isn't enabled, the active language may be set using +:func:`.translation.override`:: + + from django.utils import translation + + def test_language_using_override(self): + with translation.override('fr'): + response = self.client.get('/') + self.assertEqual(response.content, b"Bienvenue sur mon site.") + +More details are in :ref:`explicitly-setting-the-active-language`. + Example -------