Django2.1 translation 상세 설명
6945 단어 Django
django 프로젝트를 번역할 수 있도록 파이썬 코드와 템플릿에 최소한의 갈고리를 추가해야 합니다.이 갈고리들을 번역 문자열(tanslation strings)이라고 부른다.이들은 "이 언어로 텍스트를 번역할 수 있는 경우 최종 사용자의 언어로 번역해야 한다"고 Django에게 말했다.따라서 번역 가능한 문자열을 표시하는 것은 당신의 책임입니다. 시스템은 알고 있는 문자열만 번역할 수 있습니다.
Django는 tanslation strings를 메시지 파일에서 추출하는 기능을 제공합니다.이 파일은 번역자에게 Tanslation strings와 목표 언어를 일일이 대응하는 간편한 방법을 제공합니다.일단 통역사가 메시지 파일을 기입하면 반드시 그것을 컴파일해야 한다.이 프로세스는 GNU gettext 도구 모음에 의존합니다.
2. translation 관련 정의
internationalization
소프트웨어를 현지화할 준비를 하다.보통 개발자가 완성한다.
localization
번역 및 로컬 서식을 작성합니다.통상적으로 통역사가 완성한다.자세한 내용은 W3C 웹 Internationalization FAQ, the Wikipedia article or the GNU gettext documentation을 참조하십시오.
locale name
로케일 이름, 양식 ll의 언어 사양 또는 양식 llcc의 조합 언어와 국가 규범.예: it, deAT、es、pt_BR.언어 부분은 항상 소문자로 쓰고, 국가 부분은 항상 대문자로 쓴다.구분자는 밑줄입니다.
language code
언어의 명칭을 나타낸다.브라우저와 HTTP 헤더는 모두 이 언어 이름을 그대로 사용합니다.예: it, de-at, es, pt-br.언어 코드는 일반적으로 소문자로 표시되지만 HTTP Accept 언어 헤더는 대소문자를 구분하지 않습니다.구분자는 대시입니다.
message file
메시지 파일은 하나의 언어를 나타내는 순수한 텍스트 파일입니다. 사용할 수 있는translationstring과 주어진 언어에 대한 표현 방식을 포함합니다.메시지 파일이 있습니다.po 파일 확장자.
translation string
번역 가능한 문자열
format file
포맷 파일은 주어진 구역에 데이터 포맷을 설정하는python 모듈입니다.
3. 국제ization
Standard translation
translationstring을 지정하여 gettext () 함수를 사용하여 inport을 통해 별명으로 지정합니다는 다음과 같은 일반적인 형식입니다.
from django.http import HttpResponse
from django.utils.translation import gettext as _
def my_view(request):
output = _("Welcome to my site.")
return HttpResponse(output)
주의: gettext 전에 u 접두사를 붙이는 것은python2와 구별하기 위해서이지만 Django2.1python3을 지원합니다. 다음 버전에서는 이 사용법을 취소합니다.django-admin make 메시지는 메시지 파일을 만드는 데 사용할 수 있고compile 메시지는 컴파일할 수 있습니다.
_() 또는 gettext()는 다음과 같은 자리 표시자를 사용할 수 있습니다.
def my_view(request, m, d):
output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d}
return HttpResponse(output)
Comments for translators
번역자에게 번역 가능한 문자열에 대한 힌트를 제공하려면 문자열 앞줄에translators 키워드에 접두사를 추가할 수 있습니다.생성의po 파일에도 다음과 같은 주석이 포함됩니다.
def my_view(request):
# Translators: This message appears on the home page only
output = gettext("Welcome to my site.")
#-----.po -------------#
#. Translators: This message appears on the home page only
# path/to/python/file.py:123
msgid "Welcome to my site."
msgstr ""
템플릿 언어에서는commet을 사용하여 여러 줄을 표시할 수 있습니다. 다음과 같습니다.
{% comment %}Translators: View verb{% endcomment %}
{% trans "View" %}
{% comment %}Translators: Short intro blurb{% endcomment %}
{% blocktrans %}A multiline translatable literal.{% endblocktrans %}
또는 {#...#} 을 사용하여 단일 행 태그 지정
{# Translators: Label of a button that triggers search #}
{# Translators: This is a text of the base template #}
{% blocktrans %}Ambiguous translatable block of text{% endblocktrans %}
Pluralization
함수
django.utils.translation.ngettext()
를 사용하여 정보의 복수화를 한다. 예를 들어object는 단수이고objects는 복수이며,ngettext 함수는 세 개의 매개 변수가 있는데 그것이 단수 형식의translationstring,복수 형식의translationstring과 대상의 개수이다. 다음과 같은 예이다.from django.http import HttpResponse
from django.utils.translation import ngettext
def hello_world(request, count):
page = ngettext(
'there is %(count)d object',
'there are %(count)d objects',
count) % {
'count': count,
}
return HttpResponse(page)
Contextual markers
상하문 표기는 몇몇 단어가 여러 가지 뜻이 있기 때문이다. 예를 들어 영어에서'메이'는 달의 이름일 수도 있고 동사일 수도 있다.
django.utils.translation.pgettext() , .po msgctxt , :
from django.utils.translation import pgettext
month = pgettext("month name", "May")
아니면 사용하셔도 돼요.
from django.db import models
from django.utils.translation import pgettext_lazy
class MyThing(models.Model):
name = models.CharField(help_text=pgettext_lazy(
'help text for MyThing model', 'This is the help text'))
있다po의 파일은 다음과 같이 표시됩니다.
msgctxt "month name"
msgid "May"
msgstr ""
Lazy translation
Lazy는python 디자인 모델의 한 개념으로 실제 대상의 생성을 사용할 때 생성할 수 있다. 이렇게 하면 메모리를 절약할 수 있다.
django.utils.translation lazy lazy , , 。 , , 。 , 。
、 , Django , 。 , :
1) Model fileds、 (
ForeignKey
, ManyToManyField
및 OneToOneField
)
verbose_name
및 help_text :
from django.db import models
from django.utils.translation import gettext_lazy as _
class MyThing(models.Model):
name = models.CharField(help_text=_('This is the help text'))
관계식에 verbose 사용name 옵션의 예:
class MyThing(models.Model):
kind = models.ForeignKey(
ThingKind,
on_delete=models.CASCADE,
related_name='kinds',
verbose_name=_('kind'),
)
2)Model verbose names values
from django.db import models
from django.utils.translation import gettext_lazy as _
class MyThing(models.Model):
name = models.CharField(_('name'), help_text=_('This is the help text'))
class Meta:
verbose_name = _('my thing')
verbose_name_plural = _('my things')
여기서 Meta는 Django의 내부 클래스로서 일부 Django 모델 클래스의 동작 특성을 정의하는 데 사용됩니다.https://www.cnblogs.com/flash55/p/6265405.html
3) 모델 내
short_description
, django short_description :
from django.db import models
from django.utils.translation import gettext_lazy as _
class MyThing(models.Model):
kind = models.ForeignKey(
ThingKind,
on_delete=models.CASCADE,
related_name='kinds',
verbose_name=_('kind'),
)
def is_mouse(self):
return self.kind.type == MOUSE_TYPE
is_mouse.short_description = _('Is it a mouse?')
참고:
gettext_lazy () 호출 결과는 다른 위치의django 코드에서 문자열 (str 대상) 을 사용할 수 있지만, 임의의python 코드에 적합하지 않을 수도 있습니다.예를 들어 requests 라이브러리에서 gettext 를 처리하지 않기 때문에lazy 객체 - 다음 작업을 수행할 수 없습니다.
body = gettext_lazy("I \u2764 Django") # (unicode :heart:)
requests.post('https://example.com/send', data={'body': body})
gettextlazy () 객체는 텍스트 문자열로 강제로 변환된 다음 django 코드가 아닌 코드로 전달하여 다음과 같은 문제를 방지합니다.
requests.post('https://example.com/send', data={'body': str(body)})
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.