Use LocaleMiddleware

A snippet showing how to use LocaleMiddleware in Django.


# settings.py (relevant)

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.locale.LocaleMiddleware",  # <- enable
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

LANGUAGE_CODE = "en"
LANGUAGES = [
    ("en", "English"),
    ("fr", "French"),
    ("es", "Spanish"),
]

LOCALE_PATHS = [BASE_DIR / "locale"]
      

# urls.py

from django.conf.urls.i18n import i18n_patterns
from django.urls import path
from . import views

urlpatterns = [
    # non-translated URLs
    path("healthz/", views.health, name="health"),
]

urlpatterns += i18n_patterns(
    path("about/", views.about, name="about"),
    path("contact/", views.contact, name="contact"),
)
      
Explanation:
  • Place LocaleMiddleware after SessionMiddleware and before CommonMiddleware.
  • LocaleMiddleware activates language based on cookies/session/Accept-Language.
  • i18n URL patterns prefix paths with the language code (e.g., /fr/about/).
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.