.
장고 - 트랜스는 번역 장고의 모델 콘텐츠 & NBSP위한 장고 응용 프로그램입니다, 각 언어는 저장 및 데이터베이스 수준에서 다른 열에서 자동으로 관리됩니다.
트랜스를 사용하여
번역 모델을 만들기
이 모델 봐 :
클래스 도서 (같이 models.Model) :
& NBSP; 제목 = models.CharField (MAX_LENGTH = 200)
& NBSP; 설명 = models.TextField ()
& NBSP; 몸 = models.TextField (기본값 = '')
& NBSP; 가격 = models.FloatField ()
당신이 설명과 신체 번역을하고자한다고 가정 해 봅시다. 트랜스 사용 후 결과 모델은 다음과 같습니다
트랜스 수입 트랜스에서
클래스 도서 (같이 models.Model) :
& NBSP; __ metaclass__ = 트랜스
& NBSP; 제목 = models.CharField (MAX_LENGTH = 200)
& NBSP; 설명 = models.TextField ()
& NBSP; 몸 = models.TextField (기본값 = '')
& NBSP; 가격 = models.FloatField ()
& NBSP; 클래스 메타 :
& NBSP = 번역 ( '설명', '몸')
당신이 당신의 settings.py에서 기본 및 사용 가능한 언어를 설정했는지 확인하십시오 :
LANGUAGE_CODE의 =의 '말이지'
장고의 문서가 말한대로, 기능 ugettext의 # 더미 : ugettext 람다들 =
국어 = (
& NBSP; ( 'ES', ugettext) ( '스페인어'),
& NBSP; ( '엉', ugettext ( '영어')),
)
이 ./manage.py sqlall 명령으로 생성 된 SQL입니다 :
BEGIN;
(표 "fooapp_book 작성"
& NBSP; "ID"직렬 NOT NULL PRIMARY KEY,
& NBSP; "제목"VARCHAR (200) NOT NULL,
& NBSP; "description_en"텍스트,
& NBSP; "description_es"텍스트가 NULL NOT,
& NBSP; "body_es"텍스트가 NULL NOT,
& NBSP; "body_en"텍스트가 NULL NOT,
& NBSP; "가격"배정 밀도 NULL NOT
)
;
COMMIT;
주 : * 트랜스는 각각의 언어에 대한 하나의 열을 만듭니다. 미래에 새로운 언어를 필요에 대해 걱정하지 마십시오, 트랜스 당신을 위해이 문제를 해결합니다. * 하나의 필드가 거짓 = null로, 디폴트 값이없는 경우, 트랜스 기본 언어, 하나의 NOT NULL 필드를 작성합니다. 다른 보조 언어에 대한 필드는 널 (NULL)이 될 것입니다. 다른 필드는 선택 사양 반면 또한, 기본 언어는 (빈 = 참), 관리 응용 프로그램에 필요합니다. 콘텐츠 번역에 대한 일반적인 접근 방식은 처음이 나중에 기본 언어로 콘텐츠를 추가하고 있기 때문에 번역이 다른 언어로 번역 할 수 있도록이 이루어졌다. * 당신은 데이터베이스 스키마를 만들 ./manage.py syncdb를 사용할 수 있습니다.
파이썬 쉘에서 재생
트랜스는 모델에 정의 된 모든 번역 필드에 사용할 수있는 모든 언어에 대해 하나의 필드를 만듭니다. 그래서 description_es, description_en 및 : 필드의 이름은 언어의 단축 번호, 예를 들어 접미사된다. 또한 그것은 활성 언어 필드 값을 검색 FIELD_NAME 게터를 만든다.
의는이 작업을 수행하는 방법을 가장 잘 이해하는 파이썬 쉘에서 조금 놀자 :
된다된다된다 fooapp.models에서 책을 가져
된다된다된다 B = Book.objects.create (description_es = u'mi descripcion ', description_en = u'my 설명')
된다된다된다 b.description
u'my 설명 '
된다된다된다 django.utils.translation 수입 활성화에서
된다된다된다 ( '말이지')를 활성화
된다된다된다 b.description
u'mi의 descripcion '
된다된다된다 b.description_en
u'my 설명 '
새로운 언어를 추가
당신은 당신의 settings.py을 변경하고 다시 DB를 동기화 트랜스를 요청해야 기존에 새로운 언어를 추가해야하는 경우. 예를 들어, 우리의 프로젝트에 프랑스어를 추가하려면 settings.py에 언어를 추가해야합니다 :
국어 = (
& NBSP; ( 'ES', ugettext) ( '스페인어'),
& NBSP; ( '엉', ugettext ( '영어')),
& NBSP; ( 'FR', ugettext ( '불어')),
)
그리고 특별한 sync_transmeta_db 명령을 실행합니다 :
& NBSP; ./ manage.py sync_transmeta_db
"fooapp.book"모델 "설명"필드에서 언어를 누락 : FR
SQL은 "fooapp.book"스키마를 동기화 :
& NBSP는; 표 "fooapp_book을"ALTER COLUMN "description_fr"텍스트를 추가
(Y / N) [N] : 당신은 당신이 이전 SQL을 실행 하시겠습니까 (Y)
실행 SQL ... 완료
"fooapp.book"모델 "몸"필드에서 언어를 누락 : FR
SQL은 "fooapp.book"스키마를 동기화 :
& NBSP는; 표 "fooapp_book을"ALTER COLUMN "body_fr"텍스트를 추가
(Y / N) [N] : 당신은 당신이 이전 SQL을 실행 하시겠습니까 (Y)
실행 SQL ... 완료
그리고 다!
새로운 번역 분야 추가
이제 (많은 책 생성과)이 웹 응용 프로그램을 사용하여 몇 달 후, 상상, 당신은 (책 가격이 통화에 의존하기 때문에, 예를 들어) 책 가격 번역을해야합니다.
이를 위해, 먼저 모델의 번역 가능한 필드 목록에 가격을 추가
클래스 도서 (같이 models.Model) :
& NBSP; ...
& NBSP; 가격 = models.FloatField ()
& NBSP; 클래스 메타 :
& NBSP = ( '설명', '몸', '가격') 번역
모든 것은 DB 스키마를 업데이트 할 sync_transmeta_db 명령을 호출 이제 남은 :
& NBSP; ./ manage.py sync_transmeta_db
사용 가능한 언어 :
& NBSP; 1. 스페인어
& NBSP; 2. 영어
현재 번역되지 않은 데이터를 넣을에서 언어를 선택합니다.
현재 데이터의 언어는 무엇입니까? (1-2) : (1)
"fooapp.book"모델 "가격"필드에서 언어를 누락 : ES, 욕실
SQL은 "fooapp.book"스키마를 동기화 :
& NBSP는, 배정 밀도 표 "fooapp_book는"COLUMN "price_es"를 추가 ALTER
& NBSP; UPDATE "fooapp_book"SET "price_es"= "가격"
& NBSP는; 표 "fooapp_book"를 변경하지 NULL을 SET COLUMN "price_es을"ALTER
& NBSP는; 표 "fooapp_book는"ADD COLUMN을 ALTER "price_en"배정도
& NBSP는; 표 "fooapp_book"DROP COLUMN에 "가격"ALTER
(Y / N) [N] : 당신은 당신이 이전 SQL을 실행 하시겠습니까 (Y)
실행 SQL ... 완료
어떤이 명령을 수행하는 지옥?
sync_transmeta_db 명령뿐만 아니라 그것은 언어 중 하나에 이전 가격 필드에서 데이터를 복사 ... 새 번역 필드에 대한 새 데이터베이스 열을 생성하고, 명령은 실제 데이터를 대상 언어 필드를 요청할 이유입니다.
관리 통합
트랜스 투명하게 관리 인터페이스로 모든 번역 필드가 표시됩니다. 모델은 사실 많은 분야 (각 언어에 대해 하나에게)에 있기 때문 쉽다.
관리자에 양식 필드를 변경하는 것은 매우 일반적인 작업이며, 트랜스은 한 번에 모든 언어 필드에 대한 이러한 변경 사항을 적용 할 canonical_fieldname 유틸리티 기능을 포함하고 있습니다. 그것은 더 나은 예를 들어 설명은 다음과 같습니다
트랜스 수입 canonical_fieldname에서
클래스 BookAdmin (admin.ModelAdmin) :
& NBSP; 데프 formfield_for_dbfield (자기, db_field, ** kwargs로) :
& NBSP 필드 = 슈퍼 (BookAdmin, 자기) .formfield_for_dbfield (db_field, ** kwargs로)
& NBSP; db_fieldname = canonical_fieldname (db_field)
& NBSP; 경우 db_fieldname == '설명'
& NBSP; #이 모든 description_ * 필드에 적용
& NBSP; field.widget = MyCustomWidget ()
& NBSP;의 elif field.name == 'body_es'
& NBSP; #이 body_es 필드에만 적용
& NBSP; field.widget = MyCustomWidget ()
& NBSP; 반환 필드
특징 :
번역 필드 자동 스키마 작성.
번역 분야는 장고의 관리 인터페이스에 통합.
명령 새 번역 필드와 새로운 언어를 추가하는 데이터베이스 스키마를 동기화합니다.
이 릴리스의 새로운 기능 :
get_mandatory_fieldname 기능을 추가했습니다.
버전 0.6.9의 새로운 기능 :
밑줄 필드 이름에 대한 방법 get_field_language에서 지원
버전 0.6.8의 새로운 기능 :
명령 sync_transmeta_db에 약간의 버그를 수정 (UnboundLocalError : 지역 변수 'f는'할당하기 전에 참조)
버전 0.6.7의 새로운 기능 :
트랜스 라벨의 표현 (verbose_name) 변경
버전 0.6.6의 새로운 기능 :
명령 sync_transmeta_db 개선 및 유용성
몇 가지 버그를 수정
설명서
버전 0.6.5의 새로운 기능 :
명령 sync_transmeta_db 개선 및 유용성
마지막 장고 (명령 sync_transmeta_db)와 함께 작동
MySQL의 (명령 sync_transmeta_db)와 함께 작동
버전 0.6.4의 새로운 기능 :
모델에서 상속 수정 오류입니다.
버전 0.6.3의 새로운 기능 :
TRANSMETA_LANGUAGES 설정을 사용할 수 있습니다.
sync_transmeta_db하는 두 가지 옵션을 추가 : -y (전체에 네 가정) 및 -d (기본값 언어 코드)
버전 0.6.2의 새로운 기능 :
기본 로케일은 ES-ES 나 EN-US 맞춤법 변형이있을 때 작동합니다.
요구 사항 :
장고
파이썬
댓글을 찾을 수 없습니다