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