Функция npgettext
Функция npgettext применяется для перевода строк с учетом числа и контекста. Она принимает три обязательных аргумента: контекст, строку в единственном числе и строку во множественном числе, а также число для определения формы. Функция возвращает переведенную строку в зависимости от числа и активного языка. Это особенно полезно, когда одно и то же слово может иметь разные переводы в разных контекстах и при этом требует согласования по числу.
Синтаксис
from django.utils.translation import npgettext
npgettext(context, singular, plural, number)
Параметры функции:
⁅b⁆context⁅/b⁆ - строка, определяющая контекст перевода (например, "month_name" или "product_status");
⁅b⁆singular⁅/b⁆ - строка в единственном числе (например, "apple");
⁅b⁆plural⁅/b⁆ - строка во множественном числе (например, "apples");
⁅b⁆number⁅/b⁆ - число, определяющее, какую форму перевода использовать.
Пример
Давайте переведем фразу с учетом контекста и числа для слова "яблоко" в разных контекстах:
from django.utils.translation import npgettext
from django.utils.translation import activate
# Активируем русский язык
activate('ru')
# Контекст "fruit" для слова "яблоко"
fruit_message = npgettext('fruit', 'apple', 'apples', 5)
print(fruit_message)
# Контекст "company" для слова "Apple" (компания)
company_message = npgettext('company', 'Apple', 'Apples', 5)
print(company_message)
# Контекст "fruit" для одного яблока
single_fruit = npgettext('fruit', 'apple', 'apples', 1)
print(single_fruit)
Результат выполнения кода:
"яблок"
"Apple"
"яблоко"
Как видно из примера, в контексте "fruit" слово "apple" переводится как "яблок" для 5 яблок и как "яблоко" для 1 яблока. В контексте "company" слово "Apple" остается без перевода, так как это название компании.
Пример
Используем функцию npgettext в шаблоне Django для отображения количества товаров с учетом контекста:
from django.utils.translation import npgettext
# Контекст "products" для товаров
product_count = 3
message = npgettext('products', 'product', 'products', product_count)
print(f"Added {product_count} {message}")
# Контекст "orders" для заказов
order_count = 1
order_message = npgettext('orders', 'order', 'orders', order_count)
print(f"You have {order_count} {order_message}")
Результат выполнения кода:
"Added 3 products"
"You have 1 order"
Пример
Использование функции npgettext в модели с динамическими данными:
from django.db import models
from django.utils.translation import npgettext
from django.utils import translation
class Product(models.Model):
name = models.CharField(max_length=100)
quantity = models.IntegerField()
def get_quantity_message(self):
# Используем контекст "inventory" для инвентаризации
return npgettext('inventory', 'item', 'items', self.quantity)
# Пример использования
translation.activate('ru')
product = Product(name='Laptop', quantity=10)
message = product.get_quantity_message()
print(f"{product.name}: {product.quantity} {message}")
Результат выполнения кода:
"Laptop: 10 items"
Смотрите также
-
функция
pgettext,
которая выполняет контекстный перевод без учета числа -
функция
ngettext,
которая выполняет перевод с учетом числа без контекста -
функция
gettext,
которая выполняет простой перевод строки -
функция
npgettext_lazy,
которая выполняет ленивый контекстный перевод с учетом числа