.
Django-transmeta çevrilebilir Django nin modelləri məzmun & nbsp üçün Django app deyil, Hər bir dil saxlanılır və verilənlər bazası səviyyədə fərqli sütun avtomatik idarə olunur.
istifadə transmeta strong>
Çevrilebilir modelləri yaratmaq
Bu model baxın:
class Kitab (models.Model):
& Nbsp; title = models.CharField (max_length = 200)
& Nbsp; təsviri = models.TextField ()
& Nbsp; bədən = models.TextField (default = '')
& Nbsp; qiymət = models.FloatField ()
Siz təsviri və bədən çevrilebilir etmək istəyirəm düşünək. transmeta istifadə sonra çıxan model:
transmeta idxal TransMeta dən
class Kitab (models.Model):
& Nbsp; __ metaclass__ = TransMeta
& Nbsp; title = models.CharField (max_length = 200)
& Nbsp; təsviri = models.TextField ()
& Nbsp; bədən = models.TextField (default = '')
& Nbsp; qiymət = models.FloatField ()
& Nbsp; class Meta:
& Nbsp; = translate ('şərhi "," bədən)
Siz settings.py-u mənim və mövcud languages müəyyən əmin olun:
LANGUAGE_CODE = 'es'
Django nin docs deyərlər, funksiyası ugettext s # dummy: ugettext Lambda s =
Dillər = (
& Nbsp; (es 'ugettext) (İspan),
& Nbsp; ('en "ugettext (İngilis dili))
)
Bu ./manage.py sqlall əmri ilə yaradılan SQL edir:
BEGIN;
(TABLE "fooapp_book" Yarat
& Nbsp; "id" serial Null DEYİL PRIMARY KEY,
& Nbsp; "adı" VARCHAR (200) NULL deyil,
& Nbsp; "description_en" text,
& Nbsp; "description_es" text NULL deyil,
& Nbsp; "body_es" text NULL deyil,
& Nbsp; "body_en" text NULL deyil,
& Nbsp; "qiymət" ikiqat dəqiq NULL deyil
)
;
Işləmək;
Qeydlər: * transmeta hər dil üçün bir sütun yaradır. Gələcəkdə yeni dil ehtiyacı narahat etməyin, transmeta sizin üçün bu problem həll edir. * Bir sahədə False = null və default dəyəri yoxdur, transmeta default dil, yalnız bir Null DEYİL sahəsində yaradacaq. Digər orta dillər üçün Fields nullable olacaq. Digər sahələrdə isteğe olacaq Həmçinin, əsas dil (boş ilə = True), admin app tələb olunacaq. Content tərcümə normal yanaşma ilk var sonra əsas dilində məzmun əlavə və çünki tərcüməçilər digər dillərə tərcümə Bu edildi. * Siz verilənlər bazası şeması yaratmaq üçün ./manage.py SyncDB istifadə edə bilərsiniz.
Python shell oynayan
transmeta bir model müəyyən edilmiş hər çevrilebilir sahəsində hər mövcud dil üçün bir sahə yaradır. Belə description_es, description_en və: Alan adları dil qısa kodları, məsələn suffixed olunur. Bundan əlavə, fəal dil sahəsində dəyəri almaq üçün field_name törədici yaradır.
Bu işləri necə yaxşı anlamaq üçün bir python shell bir az oynamaq edək:
& Gt; & gt; & gt; fooapp.models kitab idxal
& Gt; & gt; & gt; b = Book.objects.create (description_es = u'mi təsviri, description_en = u'my təsviri)
& Gt; & gt; & gt; b.description
u'my təsviri "
& Gt; & gt; & gt; django.utils.translation idxal aktivləşdirmək dən
& Gt; & gt; & gt; (es) aktivləşdirmək
& Gt; & gt; & gt; b.description
u'mi təsviri "
& Gt; & gt; & gt; b.description_en
u'my təsviri "
Yeni dil əlavə
Siz yalnız settings.py dəyişdirmək və yenidən DB senkronize transmeta soruşmaq lazımdır mövcud yeni dil əlavə etmək lazımdır. Məsələn, bizim layihənin Fransız əlavə etmək üçün, siz settings.py olan DİLLƏR əlavə etmək lazımdır:
Dillər = (
& Nbsp; (es 'ugettext) (İspan),
& Nbsp; ('en "ugettext (İngilis dili))
& Nbsp; (fr "ugettext (Fransa))
)
Və xüsusi sync_transmeta_db əmri icra:
& Nbsp; ./ manage.py sync_transmeta_db
"Fooapp.book" model "şərhini" sahəsində dilləri itkin: fr
SQL "fooapp.book" şeması sinxronizasiya etmək üçün:
& Nbsp; MASA "fooapp_book" Mehrab KÖŞƏ "description_fr" mətn ƏlAVƏ
(Y / n) [n]: siz əvvəlki SQL icra istədiyinizdən əminsinizmi y
İcraçı SQL ... Done
"Fooapp.book" model "bədən" sahəsində dilləri itkin: fr
SQL "fooapp.book" şeması sinxronizasiya etmək üçün:
& Nbsp; MASA "fooapp_book" Mehrab KÖŞƏ "body_fr" mətn ƏlAVƏ
(Y / n) [n]: siz əvvəlki SQL icra istədiyinizdən əminsinizmi y
İcraçı SQL ... Done
Və həyata!
Yeni çevrilebilir sahələri əlavə
İndi (çox kitab yaradılmış ilə) bu web app istifadə edərək bir neçə ay sonra, təsəvvür edin ki, siz (kitab qiymət valyuta asılıdır, çünki misal üçün) kitab qiymət çevrilebilir etmək lazımdır.
Buna nail olmaq üçün, ilk model çevrilebilir sahələri siyahısına qiymət əlavə edin:
class Kitab (models.Model):
& Nbsp; ...
& Nbsp; qiymət = models.FloatField ()
& Nbsp; class Meta:
& Nbsp; = ('şərhi "," bədən "," qiymət ") tərcümə
Bütün DB şeması yeniləmə sync_transmeta_db komanda zəng indi qaldı:
& Nbsp; ./ manage.py sync_transmeta_db
Mövcud diller:
& Nbsp; 1. Ispan
& Nbsp; 2. Ingilis
Cari untranslated məlumat qoymaq üçün bir dil seçin.
Cari məlumatların dili nədir? (1-2): 1
"Fooapp.book" model "qiymət" sahəsində dilləri itkin: es, en
SQL "fooapp.book" şeması sinxronizasiya etmək üçün:
& Nbsp; ikiqat dəqiq MASA "fooapp_book" KÖŞƏ "price_es" ƏlAVƏ ALTER
& Nbsp; OLUNUB "fooapp_book" SET "price_es" = "qiymət"
& Nbsp; MASA "fooapp_book" Mehrab deyil NULL SET KÖŞƏ "price_es" ALTER
& Nbsp; MASA "fooapp_book" KÖŞƏ ƏlAVƏ ALTER "price_en" ikiqat dəqiq
& Nbsp; MASA "fooapp_book" Drop KÖŞƏ "qiymət" ALTER
(Y / n) [n]: siz əvvəlki SQL icra istədiyinizdən əminsinizmi y
İcraçı SQL ... Done
Bu komanda yoxdur cəhənnəm?
sync_transmeta_db komanda yalnız dillərin birinə köhnə qiymət sahəsində məlumatların surəti ... Yeni çevrilebilir sahəsində yeni verilənlər bazası sütun yaradır və komanda faktiki məlumatların təyinat ərazidə üçün xahiş niyə ki.
Admin inteqrasiya
transmeta şəffaf admin interface bütün çevrilebilir sahələri göstərilir. Modellər əslində çox sahələri (hər dil üçün) var, çünki bu çox asandır.
Admin formu alanları dəyişdirilməsi olduqca ümumi vəzifəsi olan və transmeta dəfə bütün dil sahələri üçün bu dəyişikliklər tətbiq etmək canonical_fieldname kommunal funksiyası daxildir. Bu, daha yaxşı bir misal ilə izah edir:
transmeta idxal canonical_fieldname dən
class BookAdmin (admin.ModelAdmin):
& Nbsp; def formfield_for_dbfield (özünü, db_field ** kwargs):
& Nbsp; sahəsində = super (BookAdmin, özünü) .formfield_for_dbfield (db_field ** kwargs)
& Nbsp; db_fieldname = canonical_fieldname (db_field)
& Nbsp; əgər db_fieldname == 'şərhi:
& Nbsp; # bu description_ * sahələri aiddir
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; elif field.name == 'body_es:
& Nbsp; # Bu body_es sahəsində aiddir
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; qaytarılması sahəsində
Features
- çevrilebilir sahələri ilə avtomatik şeması yaradılması.
- çevrilebilir sahələri Django nin admin interfeysi inteqrasiya.
- Command yeni çevrilebilir sahələri və yeni dil əlavə etmək verilənlər bazası şeması sinxronizasiya etmək.
Bu azad yeni nədir:
- Əlavə get_mandatory_fieldname fəaliyyət göstərir.
versiya 0.6.9 yeni nədir:
- vurğulayır sahəsində adları üsulu get_field_language dəstək
versiya 0.6.8 yeni nədir:
- command sync_transmeta_db bir az səhv düzelt (UnboundLocalError: tapşırıq əvvəl müraciət "f" yerli dəyişən)
versiya 0.6.7 yeni nədir:
- transmeta yazıları təmsil (verbose_name) Change
versiya 0.6.6 yeni nədir:
- təkmilləşdirilməsi və Kullanışlılık
- Fix bəzi hataları
- Documentation
Komanda sync_transmeta_db da
versiya 0.6.5 yeni nədir:
- təkmilləşdirilməsi və Kullanışlılık
- Sonuncu Django (command sync_transmeta_db) ilə işləyir
- MySQL ilə işləyir (command sync_transmeta_db)
Komanda sync_transmeta_db da
versiya 0.6.4 yeni nədir:
- modelləri miras ilə giderir səhv.
versiya 0.6.3 yeni nədir:
- bir TRANSMETA_LANGUAGES ayarlarını istifadə etmək üçün imkan verir.
- Əlavə iki variantları sync_transmeta_db üçün: y (bütün yes güman) və d (U mənim dil code)
versiya 0.6.2 yeni nədir:
- işləyir.
Default yerli es-ES ya en-ABŞ imla variantlar var
tələblər
- Django
- Python
Şərhlər tapılmadı