get_language_from_request

Функция get_language_from_request применяется для определения предпочтительного языка пользователя на основе данных запроса. Она анализирует заголовок Accept-Language, параметры запроса, настройки сессии и cookies. Функция возвращает строку с кодом языка, например, 'ru' или 'en-us'.

Функция принимает объект запроса и возвращает код языка. Если язык не может быть определён, возвращается значение по умолчанию из настроек LANGUAGE_CODE.

Синтаксис

pythonfrom django.utils.translation import get_language_from_request

language = get_language_from_request(request, check_path=False)

Параметры функции:

request - объект HTTP-запроса, который содержит информацию о заголовках, cookies и параметрах.

check_path - булевый параметр, указывающий, нужно ли проверять URL-путь на наличие префикса языка (по умолчанию False).

Пример . С заголовком Accept-Language

Рассмотрим определение языка из заголовка Accept-Language входящего запроса:

pythonfrom django.utils.translation import get_language_from_request
from django.http import HttpRequest

# Создаём объект запроса с заголовком Accept-Language
request = HttpRequest()
request.META['HTTP_ACCEPT_LANGUAGE'] = 'ru-RU,ru;q=0.9,en;q=0.8'

language = get_language_from_request(request)
print(language)

Результат выполнения кода:

python"ru"

Пример . С параметром check_path

Покажем, как функция определяет язык из URL-пути при включённом параметре check_path:

pythonfrom django.utils.translation import get_language_from_request
from django.http import HttpRequest

# Запрос с путём, содержащим префикс языка
request = HttpRequest()
request.path = '/en/about/'

language = get_language_from_request(request, check_path=True)
print(language)

Результат выполнения кода:

python"en"

Пример . Во view-функции

Используем функцию в контроллере для определения языка пользователя и адаптации контента:

pythonfrom django.shortcuts import render
from django.utils.translation import get_language_from_request

def article_list(request):
  language = get_language_from_request(request)
  
  # Формируем контент в зависимости от языка
  context = {
    'current_language': language,
    'articles': get_articles_by_language(language),
  }
  
  return render(request, 'articles/list.html', context)

Смотрите также

  • функция get_language,
    которая возвращает текущий активный язык
  • функция get_language_bidi,
    которая определяет, является ли язык двунаправленным
  • функция override,
    которая временно переопределяет текущий язык
  • функция activate,
    которая активирует указанный язык для текущего потока