gpt4 book ai didi

Django REST Framework 翻译不起作用

转载 作者:行者123 更新时间:2023-12-04 13:44:05 25 4
gpt4 key购买 nike

我在 Django rest 中翻译自定义异常时遇到问题,问题是当我在设置中更改 LANGUAGE_CODE 时,一切正常,我得到了两种语言的正确翻译,但是当我尝试在标题更改翻译,它不应该工作!
我的设置是:

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

我的异常(exception):
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

当我发送带有此 header 的请求(Accept-Language=fa-ir)时,我可以看到 lang 变量值为 fa,因此框架知道我更改了语言,但响应仍为英文:
{
"detail": "username or password is wrong"
}

任何的想法?

最佳答案

今天我处理了同样的问题。我找到了这个帖子,看到它没有解决。

这是因为这些错误消息是在类变量中定义的,因此,它们是在加载服务器时定义的。所以,在那一刻,没有 Accept-Language在 header 中,因为没有请求。

为了解决这个问题,我使用了 gettext_lazy而不是 gettext因为该函数以惰性方式转换字符串。您应该使用 gettext_lazy。在 ugettext() vs. ugettext_lazy()关于ugettext有很好的解释对比 ugettext_lazy这让我明白了这个问题:

对于您的代码示例:

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

关于Django REST Framework 翻译不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52182397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com