Функция gettext_noop

Функция gettext_noop применяется для пометки строк как переводимых, но без их фактического перевода в момент вызова. Она возвращает саму строку без изменений, но позволяет инструментам извлечения сообщений (например, makemessages) обнаружить эту строку и добавить её в файлы перевода. Это особенно полезно в ситуациях, когда строка будет использоваться в разных местах или контекстах, и её перевод должен быть выполнен позже, когда будет доступен активный язык.

Синтаксис

pythonfrom django.utils.translation import gettext_noop

message = gettext_noop("String to mark for translation")

Функция принимает один обязательный аргумент - строку для маркировки, и возвращает её без изменений.

Пример

Давайте промаркируем строку для перевода, но не будем её переводить сразу:

pythonfrom django.utils.translation import gettext_noop

# Маркируем строку для перевода без немедленного выполнения
message = gettext_noop("Welcome to our website")
print(message)

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

python"Welcome to our website"

Как видите, функция просто вернула исходную строку. Однако эта строка была отмечена для перевода, и команда makemessages добавит её в файл перевода.

Пример

Теперь давайте используем маркированную строку в модели, где перевод будет выполнен позже с помощью gettext_lazy:

pythonfrom django.db import models
from django.utils.translation import gettext_noop, gettext_lazy

class Article(models.Model):
  STATUS_CHOICES = [
    ('draft', gettext_noop("Draft")),
    ('published', gettext_noop("Published")),
  ]

  title = models.CharField(max_length=200)
  status = models.CharField(
    max_length=10,
    choices=[
      (status, gettext_lazy(label))
      for status, label in STATUS_CHOICES
    ]
  )

  def __str__(self):
    return self.title

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

python"Article object with status choices marked for translation"

В этом примере строки для статусов сначала маркируются с помощью gettext_noop, а затем при создании choices они преобразуются в ленивые переводы с помощью gettext_lazy. Это позволяет сохранить строки в файлах перевода и выполнить перевод только при необходимости.

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

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