Функция ngettext_lazy
Функция ngettext_lazy применяется для перевода фраз, которые зависят от числа, с отложенным (ленивым) вычислением. Она возвращает объект, который будет переведен на активный язык только в момент преобразования в строку. Это особенно полезно для полей моделей, определений классов и других мест, где перевод должен выполняться после загрузки локали.
Параметры функции:
- ⁅b⁆singular⁅/b⁆ - строка в единственном числе.
- ⁅b⁆plural⁅/b⁆ - строка во множественном числе.
- ⁅b⁆number⁅/b⁆ - число, определяющее форму слова.
Синтаксис
ngettext_lazy(singular, plural, number)
Пример . Использование в модели
Определим модель с методом, возвращающим количество комментариев с правильным склонением:
from django.db import models
from django.utils.translation import ngettext_lazy
class Article(models.Model):
title = models.CharField(max_length=100)
comments_count = models.IntegerField(default=0)
def get_comments_count(self):
return ngettext_lazy(
'%d comment',
'%d comments',
self.comments_count
) % self.comments_count
Пример . С форматированием
Используем функцию внутри шаблона для вывода информации о количестве статей:
from django.utils.translation import ngettext_lazy
articles_count = 5
res = ngettext_lazy(
'There is %d article',
'There are %d articles',
articles_count
) % articles_count
print(str(res))
Результат выполнения кода:
"There are 5 articles"
Пример . С разными числами
Проверим работу функции с разными значениями числа:
from django.utils.translation import ngettext_lazy
for count in [0, 1, 2, 10]:
message = ngettext_lazy(
'%d user',
'%d users',
count
) % count
print(str(message))
Результат выполнения кода:
"0 users"
"1 user"
"2 users"
"10 users"
Пример . С отложенным переводом
Покажем, что перевод выполняется только в момент преобразования в строку:
from django.utils.translation import ngettext_lazy
# Функция возвращает объект lazy, а не строку
translation = ngettext_lazy(
'%d product',
'%d products',
3
)
print(type(translation))
print(str(translation) % 3)
Результат выполнения кода:
<class 'django.utils.functional.lazy'>
"3 products"
Смотрите также
-
функция
ngettext,
которая выполняет немедленный перевод с учетом числа -
функция
gettext_lazy,
которая выполняет ленивый перевод без учета числа -
функция
pgettext_lazy,
которая выполняет ленивый контекстный перевод -
функция
npgettext_lazy,
которая выполняет ленивый контекстный перевод с учетом числа