Django 消息框架 - 默认情况下缺少 i18n

Django messages framework - lack of i18n by default

默认情况下,django 消息框架不会正确本地化它的消息。 例如在管理界面

如您所见,管理面板中的所有其他内容均已本地化。翻译文件 exists。这是我的设置。


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

中也不存在

这是对 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

关于补丁

mysite/apps.py 中的子类 AppConfig:

from django.apps import AppConfig


class MySiteAppConfig(AppConfig):
    name = 'mysite'

    def ready(self):
        _patch_gettext()

mysite/settings.py:

中将 INSTALLED_APPS 中的那个子类的虚线路径
INSTALLED_APPS = [
    ...
    'mysite.apps.MySiteAppConfig',
]

参考:https://docs.djangoproject.com/en/3.0/ref/applications/#configuring-applications