В моем проекте 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 ""