Django-transmeta ay isang Django app para sa mga maisasalin na nilalaman sa mga modelo Django & nbsp;. Ang bawat wika ay naka-imbak at awtomatikong pinamamahalaang sa ibang hanay sa antas ng database.
Ang paggamit ng transmeta strong>
Paglikha ng mga maisasalin na mga modelo
Tumingin sa modelong ito:
class na Aklat (models.Model):
& Nbsp; title = models.CharField (MAX_LENGTH = 200)
& Nbsp; description = models.TextField ()
& Nbsp; body = models.TextField (default = '')
& Nbsp; presyo = models.FloatField ()
Ipagpalagay na nais mong magsagawa ng paglalarawan at katawan maisasalin. Ang resultang modelo pagkatapos na gamitin transmeta ay:
mula sa pag-import transmeta TransMeta
class na Aklat (models.Model):
& Nbsp; __ metaclass__ = TransMeta
& Nbsp; title = models.CharField (MAX_LENGTH = 200)
& Nbsp; description = models.TextField ()
& Nbsp; body = models.TextField (default = '')
& Nbsp; presyo = models.FloatField ()
& Nbsp; klase Meta:
& Nbsp; isalin = ('paglalarawan', 'katawan',)
Tiyakin na iyong na-set ang default at mga magagamit na wika sa iyong settings.py:
LANGUAGE_CODE = 'es'
ugettext = lambda s: s # dummy ugettext function, gaya ng sinasabi ng mga doc Django ni
WIKA = (
& Nbsp; ('es', ugettext ('Espanyol')),
& Nbsp; ('en', ugettext ('Ingles')),
)
Ito ang SQL nabuo sa ./manage.py utos sqlall:
BEGIN;
LILIKHA TALAAN "fooapp_book" (
& Nbsp; "id" serial HINDI null PANGUNAHIN KEY,
& Nbsp; "title" varchar (200) HINDI null,
& Nbsp; text "description_en",
& Nbsp; HINDI null text "description_es",
& Nbsp; HINDI null text "body_es",
& Nbsp; HINDI null text "body_en",
& Nbsp; HINDI null "presyo" double katumpakan
)
;
Gumawa;
Mga Tala: * transmeta ay lumilikha ng isang hanay para sa bawat wika. Huwag mag-alala tungkol sa nangangailangan ng mga bagong wika sa hinaharap, malulutas nito ang transmeta ang problemang ito para sa iyo. * Kung isang field ay null = Maling at walang default na halaga, transmeta ay lilikha lamang ng isang HINDI null field, para sa default na wika. Patlang ng para sa iba pang mga wika pangalawang ay nullable. Gayundin, ang pangunahing wika ay kinakailangan sa admin app, habang ang iba pang mga patlang ay opsyonal (na may blangko = True). Ginawa ito upang dahil ang normal na diskarte para sa pagsasalin ng nilalaman ay unang magdagdag ng nilalaman sa pangunahing wika at mas bago magkaroon ng mga tagapagsalin isalin sa iba pang mga wika. * Maaari mong gamitin ./manage.py syncdb upang lumikha ng schema ng database.
Nagpe-play sa python shell
transmeta ay lumilikha ng isang field para sa bawat magagamit na wika para sa bawat maisasalin na field ng nilinaw sa isang modelo. Pangalan ng field ay suffixed sa wika maikling code, hal: description_es, description_en, at iba pa. Bilang karagdagan ito ay lumilikha ng isang FIELD_NAME getter upang makuha ang halaga ng patlang sa aktibong wika.
Hayaan maglaro ng isang bit sa isang python shell sa pinakamahusay na maunawaan kung paano ito gumagana:
& Gt; & gt; & gt; mula fooapp.models-import ng Aklat
& Gt; & gt; & gt; b = Book.objects.create (description_es = u'mi descripcion ', description_en = u'my paglalarawan')
& Gt; & gt; & gt; b.description
u'my paglalarawan '
& Gt; & gt; & gt; mula sa pagiging aktibo ang pag-import django.utils.translation
& Gt; & gt; & gt; -activate ('es')
& Gt; & gt; & gt; b.description
u'mi descripcion '
& Gt; & gt; & gt; b.description_en
u'my paglalarawan '
Pagdaragdag ng mga bagong wika
Kung kailangan mong magdagdag ng mga bagong wika sa umiiral na kailangan mo lamang na baguhin ang iyong settings.py at hilingin transmeta upang i-sync muli ang DB. Halimbawa, upang magdagdag ng mga Pranses sa aming proyekto, kailangan mong idagdag ito sa WIKA sa settings.py:
WIKA = (
& Nbsp; ('es', ugettext ('Espanyol')),
& Nbsp; ('en', ugettext ('Ingles')),
& Nbsp; ('fr', ugettext ('Pranses')),
)
At magsagawa ng isang espesyal na command sync_transmeta_db:
& Nbsp; ./ manage.py sync_transmeta_db
Nawawalang mga wika field na "paglalarawan" mula sa "fooapp.book" modelo sa: fr
SQL upang i-synchronize "fooapp.book" schema:
& Nbsp; baguhin TALAAN "fooapp_book" ADD teksto COLUMN "description_fr"
Sigurado ka bang gusto mong upang maisagawa ang mga nakaraang SQL: (y / n) [n]: y
Isinasagawa ang SQL ... Tapos na
Nawawalang mga wika field na "katawan" mula sa "fooapp.book" modelo sa: fr
SQL upang i-synchronize "fooapp.book" schema:
& Nbsp; baguhin TALAAN "fooapp_book" ADD teksto COLUMN "body_fr"
Sigurado ka bang gusto mong upang maisagawa ang mga nakaraang SQL: (y / n) [n]: y
Isinasagawa ang SQL ... Tapos na
At tapos na!
Pagdaragdag ng bagong mga maisasalin na mga patlang
Ngayon isipin na, pagkatapos ng maraming buwan gamit ang web app (na may nilikha maraming mga libro), kailangan mong gumawa ng mga presyo ng aklat maisasalin (halimbawa dahil presyo ng aklat ay nakasalalay sa pera).
Upang makamit ito, idagdag muna presyo sa listahan ng mga maisasalin na mga patlang ng modelo:
class na Aklat (models.Model):
& Nbsp; ...
& Nbsp; presyo = models.FloatField ()
& Nbsp; klase Meta:
& Nbsp; isalin = ('paglalarawan', 'katawan', 'presyo',)
Lahat ng na kaliwa ay tumatawag ang command sync_transmeta_db upang i-update ang DB schema ngayon:
& Nbsp; ./ manage.py sync_transmeta_db
Mga magagamit na wika:
& Nbsp; 1. Espanyol
& Nbsp; 2. Ingles
Pumili ng isang wika kung saan upang ilagay kasalukuyang hindi nakasalin na data.
Ano ang wika ng kasalukuyang data? (1-2): 1
Nawawalang mga wika field na "presyo" mula sa "fooapp.book" modelo sa: es, en
SQL upang i-synchronize "fooapp.book" schema:
& Nbsp; baguhin TALAAN "fooapp_book" ADD COLUMN "price_es" double katumpakan
& Nbsp; I-UPDATE "fooapp_book ang" Itakda ang "price_es" = "presyo"
& Nbsp; baguhin TALAAN "fooapp_book" baguhin COLUMN "price_es ang" Itakda ang HINDI null
& Nbsp; baguhin TALAAN "fooapp_book" ADD COLUMN "price_en" double katumpakan
& Nbsp; baguhin TALAAN "fooapp_book" drop COLUMN "presyo"
Sigurado ka bang gusto mong upang maisagawa ang mga nakaraang SQL: (y / n) [n]: y
Isinasagawa ang SQL ... Tapos na
Ano ang impiyerno ang command na ito nagagawa?
sync_transmeta_db command na hindi lamang lumilikha ng bagong mga hanay database para sa bagong mga maisasalin na field ... itong kopyahin ang data mula sa lumang patlang na presyo sa isa sa mga wika, at iyon ang dahilan kung bakit command na humingi sa iyo ng field na destinasyon wika para sa aktwal na data.
Pagsasama ng Admin
halatang ipinapakita transmeta lahat ng mga maisasalin na mga patlang sa interface ng admin. Ito ay madaling dahil mayroon mga modelo sa katunayan maraming mga field (isa para sa bawat wika).
Ang pagpapalit ng field ng form sa admin ay medyo isang karaniwang gawain, at transmeta kasama ang canonical_fieldname utility function na upang ilapat ang mga pagbabago para sa lahat ng mga patlang wika nang sabay-sabay. Mas mahusay na ito ay ipinaliwanag sa isang halimbawa:
mula sa pag-import transmeta canonical_fieldname
klase BookAdmin (admin.ModelAdmin):
& Nbsp; def formfield_for_dbfield (sa sarili, db_field, ** kwargs):
& Nbsp; field = super (BookAdmin, sa sarili) .formfield_for_dbfield (db_field, ** kwargs)
& Nbsp; db_fieldname = canonical_fieldname (db_field)
& Nbsp; kung db_fieldname == 'paglalarawan':
& Nbsp; # na ito ay nalalapat sa lahat ng mga description_ * field
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; elif field.name == 'body_es':
& Nbsp; # na ito ay nalalapat lamang na field body_es sa
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; return field na
Mga Tampok :
- Ang awtomatikong paglikha ng schema sa mga maisasalin na mga patlang.
- maisasalin patlang na isinama sa admin interface Django iyon.
- Command upang i-synchronize ang schema ng database upang magdagdag ng bagong mga maisasalin na patlang at mga bagong wika.
Ano ang bagong sa paglabas:
- Idinagdag get_mandatory_fieldname function.
Ano ang bagong sa bersyon 0.6.9:
- Suporta sa pamamaraan get_field_language para sa pangalan ng field na may underscore
Ano ang bagong sa bersyon 0.6.8:
- Ayusin ang isang maliit na bug sa utos sync_transmeta_db (UnboundLocalError: lokal na variable 'f' referenced bago pagtatalaga)
Ano ang bagong sa bersyon 0.6.7:
- Baguhin ang representasyon (verbose_name) ng mga label transmeta li>
Ano ang bagong sa bersyon 0.6.6:
- Pagpapabuti at kakayahang magamit sa utos sync_transmeta_db
- Ayusin ang ilang mga bug
- Documentation
Ano ang bagong sa bersyon 0.6.5:
- Pagpapabuti at kakayahang magamit sa utos sync_transmeta_db
- Gumagana sa huling Django (ang command sync_transmeta_db)
- Gumagana sa MySQL (ang command sync_transmeta_db)
Ano ang bagong sa bersyon 0.6.4:
- Pag-aayos ng error sa pamana sa mga modelo.
Ano ang bagong sa bersyon 0.6.3:
- Payagan gumamit ng mga setting ng TRANSMETA_LANGUAGES.
- Nagdagdag dalawang mga pagpipilian upang sync_transmeta_db: -y (ipinapalagay oo sa lahat) at -d (default na code ng wika)
Ano ang bagong sa bersyon 0.6.2:
- Gumagana kapag default na lokal na may mga variant spelling bilang es-ES o en-US.
Mga Kinakailangan :
- Django
- Python
Mga Komento hindi natagpuan