Django 템플릿의 복수 표시 및 국제화
Django 개발에서 물체의 단수와 복수에 따라 서로 다른 표현 방식을 바꾸어야 하는데 특히 영어에서 단복수의 표시와 같다.다음과 같이 하십시오.
#
There are 5 VMs
#
There is 1 VM
Django 템플릿에서는 두 가지 방법으로 비슷한 문제를 해결할 수 있습니다.
pluralize 필터는 접미사 형식을 되돌려줍니다. 기본적으로 복수일 때 's' 접미사를 추가합니다.예:
You have {{ num_messages }} message{{ num_messages|pluralize }}.
만약num메시지는 1이고 출력은 You have 1 메시지입니다.5인 경우 "You have 5 messages."
또한 복수 상황에서 추가할 접미사를 지정할 수도 있습니다. 예를 들어,
You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.
더 깊이 들어가면 단수와 복수 형식의 접미사를 완전히 동시에 지정할 수 있다. 예를 들어
You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.
위의 문제로 돌아가면pluralize 필터를 사용하면 다음과 같은 형식이 됩니다.
There {{ amount|pluralize:"is,are" }} {{ amount }} VM{{ amount|pluralize }}
주의해야 할 것은 0은 영어에서 복수로 간주된다.
그러나 주의해야 할 것은 위의 이런 방법은 사용이 매우 편리하지만 이를 국제화할 수 없다는 것이다.국제화를 지원해야 한다면 다음과 같은 방법이 필요하다.
Blocktrans 블록 태그 + plural 태그
Blocktrans 국제화 용법
trans
라벨과 달리 blocktrans
템플릿 라벨에 대해서는 자리 차지 문자를 통해 복잡한 문장 (문자열과 변수를 동시에 포함) 을 국제화할 수 있습니다.다음과 같습니다.{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}
또한 템플릿 표현식, 즉 접근 대상의 속성이나 필터를 사용해야 한다면 이 표현식의 값을 국부 변수에 부여하여 Blocktrans 내부에서 사용해야 한다.원인은 뒤의 주의 설명을 보십시오.
#
{% blocktrans with amount=article.price %}
That will cost $ {{ amount }}.
{% endblocktrans %}
#
{% blocktrans with myvar=value|filter %}
This will have {{ myvar }} inside.
{% endblocktrans %}
#
{% blocktrans with book_t=book|title author_t=author|title %}
This is {{ book_t }} by {{ author_t }}
{% endblocktrans %}
django.po
파일에 대응하는 번역은 이렇게 써야 한다msgid "That will cost $ %(amount)s."
msgstr " $ %(amount)s ."
with =
를 통해 값을 부여하는 방식은 후의django버전에서 지원되고 물론 새 버전은 with as
의 값을 부여하는 방식을 지원한다. 예를 들어 python
{% blocktrans with book|titleas book_t and author|title as author_t %}
blocktrans 복수화 사용 – plural 라벨
또한
blocktrans
태그는 복수화(pluralization)도 지원하며 다음 단계를 수행합니다.count =
를 통해 판단할 수량 변수를 지정하면 이counter는 단수 형식인지 복수 형식인지 판단하는 데 사용될 것이다다음 예제에서 설명하십시오.
{% blocktrans count counter=list|length %}
#
There is only one {{ name }} object.
{% plural %}
#
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}
#
{% blocktrans with amount=article.price count years=i.length %}
That will cost $ {{ amount }} per year.
{% plural %}
That will cost $ {{ amount }} per {{ years }} years.
{% endblocktrans %}
주의:
blocktrans
내부에서 ungettext
방법을 호출하여 국제화를 지원하기 때문에 ungettext
를 사용하는 것과 같이 Blocktrans 블록 라벨에서 단일 변수 이름으로만 데이터를 렌더링할 수 있기 때문에 표현식과 필터의 사용에 대해 단일 국부 변수로 미리 값을 부여하여 Blocktrans에서 데이터를 렌더링할 수 있도록 해야 한다.위에서 논의한 후에 최초의 문제로 돌아가면
blocktrans
로 복수화된 문제를 해결할 수 있을 뿐만 아니라 우아하게 국제화를 지원할 수 있다.# template
{% blocktrans count amount=amount %}
There is {{ amount }} VM.
{% plural %}
There are {{ amount }} VMs.
{% endblocktrans %}
# django.po
msgid ""
"
"
" There is %(amount)s VM.
"
msgid_plural ""
"
"
" There are %(amount)s VMs.
"
msgstr[0] ""
"
"
" %(amount)s
"
여기서 특히 포 파일에서 번역을 할 때 조판은 반드시template의 격식에 따라 엄격히 해야 한다. 특히 줄과 빈칸을 바꾸고 절대적인 일치를 유지해야 한다. 다음에 비교 분석을 하기 위해 몇 가지 모델을 제시한다.
# example 1
# -----template------
{% blocktrans count amount=amount %}
There is {{ amount }} VM.
{% plural %}
There are {{ amount }} VMs.
{% endblocktrans %}
# -----django.po-------
msgid "" # `blocktrans`
"
" # `blocktrans`
" There is %(amount)s VM.
" # ,
" " # `plural` ( )`
msgid_plural "" # `plural`
"
" # `plural`
" There are %(amount)s VMs.
" # ,
" " # `endblocktrans` ( )
msgstr[0] ""
"
"
" %(amount)s "
# ,msgstr[0] msgid "
" ,
# msgstr[0] "
%(amount)s "
# example 2
# -----template------
{% blocktrans count amount=amount %}There is {{ amount }} VM.{% plural %}There are {{ amount }} VMs.{% endblocktrans %}
# -----django.po-------
msgid "There is %(amount)s VM."
msgid_plural "There are %(amount)s VMs."
msgstr[0] " %(amount)s "
위의 코드 분석을 비교해 보면 일반적으로 프론트 데스크톱에서 미리 처리 형식의 레이아웃이 필요하지 않으면 두 번째 방식으로 표시하는 것을 권장한다.
또한 msgstr[0], msgstr[1],......에 대해 나중에 깊이 연구하면 이곳을 참고할 수 있습니다.
참조 1.Built-in template tags and filters | Django documentation | Django 2. Translation | Django documentation | Django
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.