Функция get_language_bidi

Функция get_language_bidi используется для определения направления письма текущего активного языка в Django. Она возвращает логическое значение True для языков с письмом справа налево (например, арабский, иврит, персидский) и False для языков с письмом слева направо (например, английский, русский). Функция не принимает аргументов и полагается на текущий активный язык, установленный в системе.

Синтаксис

pythonfrom django.utils.translation import get_language_bidi

is_bidi = get_language_bidi()

Пример

Рассмотрим базовый пример использования функции для определения направления текста текущего языка:

pythonfrom django.utils.translation import get_language_bidi
from django.utils.translation import activate

# Активируем арабский язык (RTL)
activate('ar')
is_bidi_ar = get_language_bidi()
print(f"Is Arabic RTL? {is_bidi_ar}")

# Активируем английский язык (LTR)
activate('en')
is_bidi_en = get_language_bidi()
print(f"Is English RTL? {is_bidi_en}")

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

python"Is Arabic RTL? True"
"Is English RTL? False"

Пример

Используем функцию get_language_bidi для динамического применения CSS-классов в представлении:

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

def my_view(request):
  is_bidi = get_language_bidi()
  context = {
    'text_direction': 'rtl' if is_bidi else 'ltr',
    'is_bidi': is_bidi,
  }
  return render(request, 'my_template.html', context)

В шаблоне можно использовать переданные переменные для адаптации верстки:

ninja<div dir="{{ text_direction }}">
  {% if is_bidi %}
    <p>This text is displayed right-to-left.</p>
  {% else %}
    <p>This text is displayed left-to-right.</p>
  {% endif %}
</div>

Пример

Пример использования функции в шаблонном фильтре для определения направления текста:

pythonfrom django import template
from django.utils.translation import get_language_bidi

register = template.Library()

@register.filter
def text_direction(value):
  if get_language_bidi():
    return f'<div dir="rtl">{value}</div>'
  return f'<div dir="ltr">{value}</div>'

Фильтр можно применить в шаблоне следующим образом:

ninja{{ some_text|text_direction|safe }}

Пример

Функция get_language_bidi может быть полезна при работе с многоязычными приложениями для корректной обработки пользовательского ввода:

pythonfrom django.utils.translation import get_language_bidi
from django.utils.translation import get_language

def process_user_input(user_input):
  current_lang = get_language()
  is_bidi = get_language_bidi()

  if is_bidi:
    # Для RTL языков обрабатываем ввод соответствующим образом
    return f"Processing RTL input '{user_input}' for language {current_lang}"
  else:
    # Для LTR языков используем стандартную обработку
    return f"Processing LTR input '{user_input}' for language {current_lang}"

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

pythonfrom django.utils.translation import activate

activate('ar')  # Арабский
res = process_user_input('مرحبا')
print(res)

activate('en')  # Английский
res = process_user_input('Hello')
print(res)

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

python"Processing RTL input 'مرحبا' for language ar"
"Processing LTR input 'Hello' for language en"

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

  • функция get_language,
    которая возвращает код текущего активного языка
  • функция get_language_from_request,
    которая определяет язык из HTTP-запроса
  • функция activate,
    которая устанавливает активный язык для текущего потока
  • тег шаблона get_current_language_bidi,
    который используется в шаблонах для определения направления письма