Перевод django rest framework не работает для меня
Я попробовал интернационализацию django rest framework.
Из официальной документации drf установите этот код в settings.py
from django.utils.translation import gettext_lazy as _
MIDDLEWARE = [
...
'django.middleware.locale.LocaleMiddleware'
]
LANGUAGE_CODE = "it"
LANGUAGES = (
('en', _('English')),
('it', _('Italian')),
('fr', _('French')),
('es', _('Spanish')),
)
TIME_ZONE = 'UTC'
USE_I18N = True
но когда я пробую POST api rest
curl -X 'POST' \
'http://172.18.0.1:7000/appjud/api/v1/reset-password/' \
-H 'accept: application/json' \
-H 'Authorization: Token 014cb7982f31767a8ce07c9f216653d4674baeaf' \
-H 'Content-Type: application/json' \
-d '{
"new_password": "",
"confirm_password": ""
}'
Response body
[
{
"newpassword": [
"This field is required."
],
"confirmpassword": [
"This field is required."
]
}
]
Response headers
allow: POST,OPTIONS
content-language: en
content-length: 91
content-type: application/json
cross-origin-opener-policy: same-origin
date: Sat,03 Dec 2022 16:14:16 GMT
referrer-policy: same-origin
server: WSGIServer/0.2 CPython/3.9.15
vary: Accept,Accept-Language,Origin
x-content-type-options: nosniff
x-frame-options: DENY
Как мы видим, он выводит "This field is required.", но я бы хотел "Questo campo è obbligatorio.". Что мне не хватает в файле config settings.py?
Похоже, что вы добавили LocaleMiddleware
в конец списка middlewares. Но порядок здесь имеет значение. Из docs:
Поскольку порядок установки промежуточного ПО имеет значение, следуйте следующим рекомендациям:
Убедитесь, что это одно из первых установленных промежуточных программ. Оно должно быть после SessionMiddleware, потому что LocaleMiddleware использует данные сессии. И оно должно быть установлено до CommonMiddleware потому что CommonMiddleware требует активированного языка для того, чтобы разрешить запрошенный URL. Если вы используете CacheMiddleware, поместите LocaleMiddleware после него.
.
Попробуйте изменить порядок в соответствии с этим примечанием.