【发布时间】:2018-09-05 10:01:48
【问题描述】:
我在翻译 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"
}
有什么想法吗?
【问题讨论】:
-
您是否运行过 makemessages/compilemessages 命令?
-
正如我所说,如果我在设置中更改语言,两种语言都可以正常翻译!所以我当然会运行编译消息等。
-
啊,对不起。试试
Accept-Language=fa, 'fa' 作为标头值。 -
不,和以前一样
标签: django django-rest-framework translation