Django интернационализация не работает для CESTON API REST JSON ответ в view.py - PullRequest
0 голосов
/ 02 апреля 2020

В моем проекте django я использую интернационализацию. Он отлично работает для наборов представлений каркаса REST, таких как ModelViewSet, но не работает для JSON представлений ответов на основе функций. Вот код:

#settings.py
from django.utils.translation import ugettext_lazy as _

LANGUAGES = [
    ('en', _('English')),
    ('tr', _('Turkish')),
]
LOCALE_PATHS = (
        os.path.join(BASE_DIR, 'locale'),
    )

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
]

Views.py включает в себя:

#views.py
from django.utils.translation import ugettext as _, get_language
from rest_framework.response import Response
from django.views.decorators.csrf import csrf_exempt
from rest_framework.permissions import AllowAny
from rest_framework.decorators import api_view, permission_classes

@csrf_exempt
@api_view(["POST"])
@permission_classes((AllowAny,))
def LoginwithUsernameApi(request):
    username = request.data.get("username")
    password = request.data.get("password")
    if username is None:
        return Response({'detail': _('Please provide username.')},
                        status=HTTP_400_BAD_REQUEST)

    user = authenticate(username=username, password=password)
    if not user:
        return Response({'error': _('Invalid username or password.')},
                        status=HTTP_404_NOT_FOUND)
    serializer = UserSerializer(user)
    return Response(serializer.data, status=HTTP_200_OK)

При отправке заголовка запроса Accept-Language:tr, также print(get_language()) возвращает tr в качестве вывода. django.po также содержит сообщение:

#django.po

#: registration/views.py:145 registration/views.py:181
#: registration/views.py:199 registration/views.py:252
msgid "Invalid username or password."
msgstr ""
...