programing

ugettext_lazy는 언제 사용해야 합니까?

bestprogram 2023. 6. 6. 10:21

ugettext_lazy는 언제 사용해야 합니까?

ugettext를 사용하는 것에 대해 질문이 있고,ugettext_lazy번역용의모델에서 사용해야 한다는 것을 배웠습니다.ugettext_lazy뷰에 있는 동안 텍스트를 사용합니다.하지만 제가 사용해야 할 다른 장소가 있나요?ugettext_lazy또한? 형태 정의는 어떻습니까?그들 사이에 성능 차이가 있습니까?

편집: 그리고 한 가지 더 있습니다.때때로, 대신에.ugettext_lazy,ugettext_noop사용됩니다.문서에 나와 있듯이,ugettext_noop문자열은 번역을 위해 표시되고 사용자에게 표시되기 전에 가능한 가장 늦은 순간에 번역됩니다. 하지만 여기서 저는 약간 혼란스럽습니다, 그것과 비슷하지 않나요?ugettext_lazy그래요? 아직 결정하기가 어려운데, 모델과 형태에 어떤 것을 사용해야 할까요?

gettext()대.gettext_lazy()

양식 또는 모델과 같은 정의에서 사용해야 합니다.gettext_lazy왜냐하면 이 정의의 코드는 단 한 번만 실행되기 때문입니다(django의 시작에 따라 다름).gettext_lazy문자열을 게으른 방식으로 번역합니다. 이는 예를 들어 모델의 속성 이름에 액세스할 때마다 문자열이 새로 번역됩니다. 장고가 시작된 이후로 이 모델을 다른 언어로 볼 수 있기 때문에 완전히 의미가 있습니다.

뷰 및 유사한 함수 호출에서 사용할 수 있습니다.gettext문제 없이, 왜냐하면 매번 뷰가 호출되기 때문입니다.gettext새로 실행되므로 항상 요청에 맞는 올바른 번역을 얻을 수 있습니다!

에 관하여gettext_noop()

브라이스가 답변에서 지적했듯이, 이 함수는 문자열을 번역을 위해 추출 가능한 것으로 표시하지만 번역되지 않은 문자열은 반환합니다.이는 변환된 문자열과 변환되지 않은 문자열의 두 위치에서 사용하는 데 유용합니다.다음 예를 참조하십시오.

import logging
from django.http import HttpResponse
from django.utils.translation import gettext as _, gettext_noop as _noop

def view(request):
    msg = _noop("An error has occurred")
    logging.error(msg)
    return HttpResponse(_(msg))

_noop의 훌륭한 사용법은 개발자들을 위해 영어로 메시지를 기록하고 싶지만, 번역된 문자열을 뷰어에게 제시하는 것입니다.예를 들어 http://blog.bessas.me/posts/using-gettext-in-django/ 에서 확인할 수 있습니다.

유휴 버전은 문자열 대신 프록시 개체를 반환하며 일부 상황에서는 예상대로 작동하지 않습니다.예:

def get(self, request, format=None):
   search_str = request.GET.get('search', '')
   data = self.search(search_str)
   lst = []
   lst.append({'name': ugettext_lazy('Client'), 'result': data})
   return HttpResponse(json.dumps(lst), content_type='application/json')

매우 마지막 줄이 JSON으로 serializeelst 개체를 시도하고 "client"에 대한 문자열 대신 프록시 개체를 가지기 때문에 실패합니다.프록시 개체를 json으로 직렬화할 수 없습니다.

언급URL : https://stackoverflow.com/questions/4160770/when-should-i-use-ugettext-lazy