首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果请求的翻译不可用,如何获取默认语言

如果请求的翻译不可用,如何获取默认语言
EN

Stack Overflow用户
提问于 2016-03-18 02:25:01
回答 1查看 538关注 0票数 2

我正在使用django-hvad进行模型翻译,并不是所有的模型都会有翻译。我希望缺省值为en-us

如果对特定语言发出请求,则响应应使用该语言(如果模型提供该翻译)。如果翻译结果不可用,我希望返回en-us

现在发生的是我得到了一个错误500:'HttpResponse' object has no attribute '_meta'。当翻译不可用和语言代码未在LANGUAGES中定义时,都会发生这种情况。

例如,当我请求en-us时,我得到了状态为200的正确响应

代码语言:javascript
复制
GET http://localhost:5000/survey/surveys/2/?language=en-us

如果我请求en-US,我会得到一个500错误(注意caps从en-us更改为en-US):

代码语言:javascript
复制
GET http://localhost:5000/survey/surveys/2/?language=en-US

当请求一种在LANGUAGES中定义但没有翻译的语言时,我得到了同样的500错误:

代码语言:javascript
复制
GET http://localhost:5000/survey/surveys/2/?language=af

下面是我的settings.py文件的语言部分:

settings.py

代码语言:javascript
复制
from django.utils.translation import ugettext_lazy as _

...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

LANGUAGES = [
    ('en-us', _('English')),
    ('af', _('Afrikaans')),
    ('ar', _('Arabic')),
    ...
    ]

如果您想知道这个请求是如何处理的,下面是该URL的视图:

views.py

代码语言:javascript
复制
class SurveyDetail(APIView):
    def get_object(self, pk):
        try:
            user_language = self.request.GET.get('language')
            return models.Survey.objects.language(user_language).get(pk=pk)
        except models.Survey.DoesNotExist:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)

    def get_related_questions(self, pk):
        try:
            user_language = self.request.GET.get('language')
            return models.SurveyQuestion.objects.language(user_language).all().filter(survey=pk)
        except models.SurveyAnswer.DoesNotExist:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)

    def get_related_answers(self, pk):
        try:
            user_language = self.request.GET.get('language')
            return models.SurveyAnswer.objects.language(user_language).all().filter(question=pk)
        except models.SurveyAnswer.DoesNotExist:
            return HttpResponse(status=status.HTTP_404_NOT_FOUND)

    def get(self, request, pk, format=None):
        survey = self.get_object(pk)
        questions = self.get_related_questions(pk)
        questions_serialized = []
        for q in questions:
            questions_serialized.append(SurveyQuestionSerializer(q).data)
            questions_serialized[-1]['answers']  = SurveyAnswerSerializer(self.get_related_answers(q.pk), many=True).data

        resp_obj = SurveySerializer(survey).data
        resp_obj['questions'] = questions_serialized

        return JSONResponse(resp_obj)
EN

回答 1

Stack Overflow用户

发布于 2017-03-16 05:35:21

https://github.com/spectras找到此解决方案

https://github.com/KristianOellegaard/django-hvad/issues/136

代码语言:javascript
复制
class MyFallbackQueryset(FallbackQueryset):
    translation_fallbacks = (None, 'en', 'de', 'fr')  

class MyModel(TranslatableModel):
    objects = TranslationManager(fallback_class=MyFallbackQueryset)

在计算查询时,无将解析为当前语言。不会进行重新排序,但由于查询的工作方式,相同的语言出现两次并不重要。此外,现在还可以覆盖默认的查询集(当没有语言、未翻译、…时使用以相同的方式调用)。例如,只需传递default_class=MyFallbackQueryset就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36068792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档