Django меняем язык в зависимости от домена

Ali Aliev [2016-05-18]

Появилась задача менять язык интерфейса в зависимости от домена, который был прикреплен к сайту. Как оказалась решение данной задачи очень простое достаточно написать небольшой middleware.

Для начала создадим в настройках settings.py следующий словарь, который мы будем использовать и читать:

LANGUAGES_DOMAINS = {
    'somedomain.com': 'en',
}

далее код самого middleware:

from django.conf import settings
from django.utils import translation


class DomainLocaleMiddleware(object):
    """
    Set language regarding of domain
    """
    def process_request(self, request):
        if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
            # Totally ignore the browser settings... 
            del request.META['HTTP_ACCEPT_LANGUAGE']

        current_domain = request.META['HTTP_HOST']
        lang_code = settings.LANGUAGES_DOMAINS.get(current_domain)

        if lang_code:
            translation.activate(lang_code)
            request.LANGUAGE_CODE = lang_code
Fork me on GitHub