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

Функция gettext_lazy

Функция gettext_lazy применяется для маркировки строк для перевода с отложенным выполнением. В отличие от gettext, которая выполняет перевод в момент вызова, gettext_lazy возвращает объект-заполнитель, который будет переведён только тогда, когда строка действительно будет использована (например, при рендеринге шаблона или преобразовании в строку). Это особенно полезно в моделях, формах и других местах, где строки загружаются до того, как язык будет окончательно установлен.

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

Синтаксис

from django.utils.translation import gettext_lazy gettext_lazy(message, *args, **kwargs)

Пример . Использование в модели

Рассмотрим пример использования gettext_lazy для определения читаемых имён полей модели, которые будут переведены на язык пользователя:

from django.db import models from django.utils.translation import gettext_lazy as _ class Article(models.Model): STATUS_CHOICES = ( ('draft', _('Draft')), ('published', _('Published')), ('archived', _('Archived')), ) title = models.CharField(_('Title'), max_length=200) content = models.TextField(_('Content')) status = models.CharField( _('Status'), max_length=20, choices=STATUS_CHOICES, default='draft' ) created_at = models.DateTimeField(_('Created at')) class Meta: verbose_name = _('Article') verbose_name_plural = _('Articles') def __str__(self): return self.title

В этом примере строки, переданные в gettext_lazy, будут переведены на язык, установленный для текущего запроса, при отображении в админке или шаблонах.

Пример . С формой

Использование gettext_lazy в формах для создания переводимых меток и сообщений об ошибках:

from django import forms from django.utils.translation import gettext_lazy as _ class ArticleForm(forms.ModelForm): title = forms.CharField(label=_('Article title')) content = forms.CharField( label=_('Content'), widget=forms.Textarea, help_text=_('Enter the article content here') ) class Meta: model = Article fields = ['title', 'content', 'status'] labels = { 'status': _('Publication status'), } error_messages = { 'title': { 'max_length': _('Title is too long (max 200 characters).'), }, }

Результат при рендеринге формы на русском языке:

"Заголовок статьи" "Содержание" "Введите содержание статьи здесь" "Статус публикации" "Заголовок слишком длинный (максимум 200 символов)."

Пример . С отложенным переводом в шаблоне

Продемонстрируем, как gettext_lazy работает в контексте шаблонов, когда строка переводится только при отображении:

from django.utils.translation import gettext_lazy as _ from django.template import Template, Context # Создаём отложенную строку greeting = _('Hello, world!') # Передаём её в контекст шаблона template = Template("{{ greeting }}") context = Context({'greeting': greeting}) # При рендеринге строка будет переведена на текущий язык res = template.render(context) print(res)

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

"Привет, мир!"

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

  • функция gettext,
    которая выполняет немедленный перевод строки
  • функция ngettext_lazy,
    которая выполняет отложенный перевод с учётом формы числа
  • функция pgettext_lazy,
    которая выполняет отложенный перевод с указанием контекста
  • тег translate,
    который используется для перевода строк в шаблонах
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить