Django фреймворк сообщений - по умолчанию отсутствует i18n - PullRequest
4 голосов
/ 29 мая 2020

По умолчанию django фреймворк сообщений неправильно локализует сообщения. Например, в интерфейсе администратора

enter image description here

As you can see all other things in admin panel are localized. The translation file существует . Вот мои настройки.


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ...
]

MIDDLEWARE = [
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.locale.LocaleMiddleware',
]

LANGUAGE_CODE = 'ru' # I've tried 'ru-RU'

TIME_ZONE = 'Europe/Moscow'

USE_I18N = True

USE_L10N = True

USE_TZ = True

Как это исправить? Заранее спасибо. У меня django версия 3.0.6. Эта ошибка также отсутствует в django 1.8

1 Ответ

6 голосов
/ 26 июня 2020

Это было критическое изменение django / django@42b9a23 (Django 3.0+), которое обновляло только французские переводы.

Вы можете исправить DjangoTranslation.gettext, чтобы справиться с умным кавычки.

def _patch_gettext():
    from django.utils.translation.trans_real import DjangoTranslation
    _gettext = DjangoTranslation.gettext

    def gettext(self, message):
        text = _gettext(self, message)
        if text is message and '“' in message:
            new_message = message.replace('“', '"').replace('”', '"')
            new_text = _gettext(self, new_message)
            if new_text is not new_message:
                return new_text
        return text

    DjangoTranslation.gettext = gettext

О исправлении

Подкласс AppConfig в mysite / apps.py :

from django.apps import AppConfig


class MySiteAppConfig(AppConfig):
    name = 'mysite'

    def ready(self):
        _patch_gettext()

Поместите пунктирный путь в этот подкласс в INSTALLED_APPS в mysite / settings.py :

INSTALLED_APPS = [
    ...
    'mysite.apps.MySiteAppConfig',
]

Ссылка: https://docs.djangoproject.com/en/3.0/ref/applications/#configuring -applications

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...