РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
710 of 818 menu

Функция npgettext_lazy

Функция npgettext_lazy применяется для перевода строк с множественным числом и учетом контекста в Django. Она работает аналогично функции npgettext, но возвращает ленивый объект перевода, который выполняется только в момент вывода строки. Это особенно полезно при определении атрибутов моделей, полей форм и других местах, где перевод должен произойти после загрузки локали.

Синтаксис

npgettext_lazy(context, singular, plural, number)

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

Параметры

Параметр context - это строка, определяющая контекст перевода. Она позволяет различать одинаковые строки в разных контекстах (например, "apple" как фрукт и как компания).

Параметр singular - строка в единственном числе, которая будет переведена.

Параметр plural - строка во множественном числе, которая будет переведена.

Параметр number - числовое значение, которое определяет, какая форма будет использована в соответствии с правилами множественного числа текущего языка.

Пример . С моделью

Определим модель с полем, использующим npgettext_lazy для отображения количества комментариев:

from django.db import models from django.utils.translation import npgettext_lazy class Article(models.Model): title = models.CharField(max_length=200) comments_count = models.IntegerField(default=0) def get_comments_label(self): return npgettext_lazy( "comments section", "comment", "comments", self.comments_count )

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

from myapp.models import Article article = Article.objects.get(id=1) article.comments_count = 5 label = article.get_comments_label() print(str(label))

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

"5 комментариев"

Пример . С формой

Используем npgettext_lazy для динамического выбора формы слова в форме:

from django import forms from django.utils.translation import npgettext_lazy class ProductForm(forms.Form): quantity = forms.IntegerField(min_value=1) def get_quantity_label(self): quantity = self.cleaned_data.get('quantity', 0) return npgettext_lazy( "product quantity", "item", "items", quantity )

Пример использования в представлении:

from myapp.forms import ProductForm form = ProductForm(data={'quantity': 3}) if form.is_valid(): label = form.get_quantity_label() print(str(label))

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

"3 items"

Пример . С разными контекстами

Покажем, как npgettext_lazy различает строки в разных контекстах:

from django.utils.translation import npgettext_lazy class Product: def __init__(self, name, price): self.name = name self.price = price def get_price_label(self): return npgettext_lazy( "product price", "dollar", "dollars", self.price ) def get_currency_label(self): return npgettext_lazy( "currency", "dollar", "dollars", self.price ) product = Product("Laptop", 1000) price_label = product.get_price_label() currency_label = product.get_currency_label() print(str(price_label)) print(str(currency_label))

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

"1000 dollars" "1000 dollars"

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

  • функция npgettext,
    которая выполняет немедленный перевод с контекстом и множественным числом
  • функция pgettext_lazy,
    которая выполняет ленивый перевод с контекстом
  • функция ngettext_lazy,
    которая выполняет ленивый перевод с множественным числом
  • функция gettext_lazy,
    которая выполняет ленивый перевод без контекста и множественного числа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить