Функция 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,
которая выполняет ленивый перевод без контекста и множественного числа