【问题标题】:Django messages framework - lack of i18n by defaultDjango 消息框架 - 默认情况下缺少 i18n
【发布时间】:2020-09-17 09:10:07
【问题描述】:

默认情况下,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-messages


    【解决方案1】:

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

    【讨论】:

    • 哇,感谢您的调查以及清晰易懂的答案!。
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2020-03-12
    • 2018-02-09
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多