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

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