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

Функция 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,
    которая выполняет ленивый контекстный перевод с учетом числа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить