Функция ngettext
Функция ngettext применяется для перевода сообщений,
которые зависят от числа. Она принимает три обязательных
аргумента: строку для единственного числа, строку для
множественного числа и число, определяющее выбор формы.
Функция возвращает переведенную строку на активном языке.
Для ленивого перевода используется функция ngettext_lazy.
Синтаксис
ngettext(singular, plural, number)
Пример
Давайте выведем количество найденных статей с правильным склонением:
from 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:
"Found one published article" # при count = 1
"Found 3 published articles" # при count = 3
Пример
Использование ngettext в шаблоне через тег blocktranslate с переменной:
{% load i18n %}
{% blocktranslate count counter=articles.count %}
Found one article.
{% plural %}
Found {{ counter }} articles.
{% endblocktranslate %}
Если в переменной counter будет число 1, выведется первая форма,
иначе - вторая с подстановкой числа.
Пример
Работа с разными языками и правилами множественного числа:
from 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)
Результат выполнения кода на русском языке:
"5 сообщений"
Обратите внимание, что для русского языка используются
свои правила склонения, которые Django учитывает
автоматически при наличии корректных переводов в
файлах .po.
Смотрите также
-
функция
gettext,
которая переводит строку без учета числа -
функция
ngettext_lazy,
которая откладывает перевод до момента использования -
функция
pgettext,
которая переводит строку с учетом контекста -
тег
blocktranslate,
который позволяет переводить блоки с множественным числом в шаблонах