Функция gettext_noop
Функция gettext_noop применяется для пометки строк как переводимых,
но без их фактического перевода в момент вызова. Она возвращает саму строку
без изменений, но позволяет инструментам извлечения сообщений (например,
makemessages) обнаружить эту строку и добавить её в файлы перевода.
Это особенно полезно в ситуациях, когда строка будет использоваться
в разных местах или контекстах, и её перевод должен быть выполнен позже,
когда будет доступен активный язык.
Синтаксис
from django.utils.translation import gettext_noop
message = gettext_noop("String to mark for translation")
Функция принимает один обязательный аргумент - строку для маркировки, и возвращает её без изменений.
Пример
Давайте промаркируем строку для перевода, но не будем её переводить сразу:
from django.utils.translation import gettext_noop
# Маркируем строку для перевода без немедленного выполнения
message = gettext_noop("Welcome to our website")
print(message)
Результат выполнения кода:
"Welcome to our website"
Как видите, функция просто вернула исходную строку.
Однако эта строка была отмечена для перевода, и команда
makemessages добавит её в файл перевода.
Пример
Теперь давайте используем маркированную строку в модели,
где перевод будет выполнен позже с помощью gettext_lazy:
from 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
Результат выполнения кода:
"Article object with status choices marked for translation"
В этом примере строки для статусов сначала маркируются с помощью
gettext_noop, а затем при создании choices они преобразуются
в ленивые переводы с помощью gettext_lazy.
Это позволяет сохранить строки в файлах перевода и
выполнить перевод только при необходимости.
Смотрите также
-
функция
gettext,
которая выполняет немедленный перевод строки -
функция
gettext_lazy,
которая выполняет перевод строки только при необходимости -
функция
ngettext,
которая переводит строки с учётом множественного числа -
функция
pgettext,
которая переводит строку с учётом контекста