Функция ngettext

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

Синтаксис

pythonngettext(singular, plural, number)

Пример

Давайте выведем количество найденных статей с правильным склонением:

pythonfrom django.utils.translation import ngettext
from myapp.models import Article

count = Article.objects.filter(status='published').count()
message = ngettext(
  "Found one published article",
  "Found %(count)d published articles",
  count
) % {'count': count}
print(message)

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

python"Found one published article"  # при count = 1
"Found 3 published articles"   # при count = 3

Пример

Использование ngettext в шаблоне через тег blocktranslate с переменной:

ninja{% load i18n %}
{% blocktranslate count counter=articles.count %}
  Found one article.
{% plural %}
  Found {{ counter }} articles.
{% endblocktranslate %}

Если в переменной counter будет число 1, выведется первая форма, иначе - вторая с подстановкой числа.

Пример

Работа с разными языками и правилами множественного числа:

pythonfrom django.utils.translation import ngettext, activate
from django.utils.translation import get_language

activate('ru')
count = 5
msg = ngettext(
  "one message",
  "%(count)s messages",
  count
) % {'count': count}
print(msg)

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

python"5 сообщений"

Обратите внимание, что для русского языка используются свои правила склонения, которые Django учитывает автоматически при наличии корректных переводов в файлах .po.

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

  • функция gettext,
    которая переводит строку без учета числа
  • функция ngettext_lazy,
    которая откладывает перевод до момента использования
  • функция pgettext,
    которая переводит строку с учетом контекста
  • тег blocktranslate,
    который позволяет переводить блоки с множественным числом в шаблонах