Django Translation (локализация) не работает в шаблоне и представлении

Я создаю приложение на django, пишу все сообщения интерфейса на английском языке, чтобы потом перевести их на другой язык. Моя первая попытка - использовать испанский язык в качестве целевого языка. Я читал другие вопросы, но у меня не было успеха с переводом в представлении и шаблоне. Вот некоторые вопросы:

  1. Localization doesn't work
  2. Django internationalization doesn't work in my project
  3. Django translations does not work
  4. Many others

В большинстве из них проблема заключается в том, что параметр LOCAL_PATHS установлен неправильно. Однако я следовал рекомендациям в ответах, поэтому думаю, что это не моя проблема, и я не могу понять, в чем дело.

Это мои настройки.

# Notice a LocalMiddleware
MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware',
    ...
]
# I have a special directory to my templates
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,  # Still needed for admin templates
        ...
    }

# Language settings
LANGUAGE_CODE = 'es'
LANGUAGES = [
    ('en', _('English')),
    ('es', _('Spanish')),
]
# I use BASE/DIR to configure the paths...
LOCALE_PATHS = [
    BASE_DIR / 'locale',
    BASE_DIR / 'utils/locale',
]
USE_I18N = True

Структура проекта:

Структура проекта

В каждом приложении есть свои собственные каталоги 'locale' и транслитерации внутри приложений работают отлично.

The messages that can't be translate are in 'utils' package. In it there are general functions and other stuffs. So, I have a 'locale' directory for 'utils' and one to my general project (for other translations outside 'utils' and apps) and that's the why these two paths are in LOCALE_PATHS, to the apps be able to use the .mo files of them.

Я передаю в контекст только строку, которая должна быть переведена (self.error_message), и вывожу ее в представлении как тестовую. Однако ни в консоли, ни в шаблоне строка не переводится.

class SocialLoginErrorView(TemplateView):
    template_name = 'user/social_login_error.html'

    def get_context_data(self, **kwargs) -> dict[Any, Any]:
        """Send the error message to the template."""
        self.get_params_data()
        context = super().get_context_data(**kwargs)
        print(f'{gettext(self.error_message)}\n{get_language()'}\n{settings.LOCALE_PATHS})
        context['error_message'] = self.error_message
        return context

Шаблон social_login_error.html:

{% extends 'base.html' %}
{% load i18n %}

{% block head_content %}
<title>Hubo un problema al iniciar sesión</title>
{% endblock head_content %}

{% block body_content %}
{% get_current_language as LANGUAGE_CODE %}

<h2>Error al iniciar sesión</h2>
<div>
    <span>Se ha detectado un problema al iniciar sesión:</span>
    <br/>
    <span>{% translate error_message %}</span>
    <br/>
    HOLA 
    <span>{{LANGUAGE_CODE|language_name}}</span>
</div>
{% endblock body_content %}

Результаты: сообщение по-прежнему на английском языке.

В консоли

Сообщение не переведено в консоли

И шаблон

Сообщение не переведено в шаблоне

Вернуться на верх