Django REST Framework перевод не работает - PullRequest
0 голосов
/ 05 сентября 2018

У меня проблема с переводом пользовательского исключения в Django rest, проблема в том, что когда я изменяю LANGUAGE_CODE в настройках, все работает нормально, и я получаю правильный перевод для обоих языков, но когда я пытался использовать Accept- Язык в шапке для изменения перевода, он не работает как надо! мои настройки:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'core.middleware.auth_middleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'core.middleware.dates_middleware',
    'core.middleware.translation_middleware',
]
#LANGUAGE_CODE = 'fa-ir'
LANGUAGE_CODE = 'en-us'

LANGUAGES = [
    ('fa', _('Farsi')),
    ('en', _('English')),
]

TIME_ZONE = 'UTC'


USE_I18N = True

USE_L10N = True

мое исключение:

from rest_framework.exceptions import APIException
from django.utils.translation import ugettext as _
class WrongUsernamePassword(APIException):
    status_code = 401
    default_detail = _('username or password is wrong')
    default_code = '401'

мой взгляд:

class UserViewSet(viewsets.ModelViewSet):
    ...

    @list_route(methods=['POST'], permission_classes=[AllowAny])
    def app_login(self, request):
        lang = translation.get_language() # here the value is fa
        raise WrongUsernamePassword

когда я отправляю запрос с этим заголовком (Accept-Language = fa-ir), я вижу, что значение переменной lang равно fa, поэтому фреймворк знает, что я меняю язык, но ответ по-прежнему на английском:

{
    "detail": "username or password is wrong"
}

есть идеи?

...