A Django-Transmeta a Django app fordítható tartalmat Django modellek. & Nbsp; Minden nyelv tárolt és kezelt automatikusan egy másik oszlop adatbázis szinten.
A Transmeta strong>
Létrehozása fordítható modellek
Nézd meg ezt a modellt:
Könyv osztály (models.Model):
& Nbsp; title = models.CharField (MAX_LENGTH = 200)
& Nbsp; description = models.TextField ()
& Nbsp; body = models.TextField (default = '')
& Nbsp; ár = models.FloatField ()
Tegyük fel, azt szeretnénk, hogy győződjön leírás és a test fordítható. Az így kapott modell használata után Transmeta:
a Transmeta import Transmeta
Könyv osztály (models.Model):
& Nbsp; __ metaclass__ = Transmeta
& Nbsp; title = models.CharField (MAX_LENGTH = 200)
& Nbsp; description = models.TextField ()
& Nbsp; body = models.TextField (default = '')
& Nbsp; ár = models.FloatField ()
& Nbsp; class Meta:
& Nbsp; lefordítani = ("leírás", "test",)
Győződjön meg róla, hogy az alapértelmezett és a rendelkezésre álló nyelvek a settings.py:
LANGUAGE_CODE = "es"
ugettext = lambda s: s # dummy ugettext funkciót, mint a Django docs mondani
NYELVEK = (
& Nbsp; ("es", ugettext ("spanyol")),
& Nbsp; ("en", ugettext ("English")),
)
Ez az SQL generált a ./manage.py sqlall parancsot:
Megkezdése;
CREATE TABLE "fooapp_book" (
& Nbsp; "id" soros NOT NULL PRIMARY KEY,
& Nbsp; "title" varchar (200) NOT NULL,
& Nbsp; "description_en" szöveg,
& Nbsp; "description_es" text NOT NULL,
& Nbsp; "body_es" text NOT NULL,
& Nbsp; "body_en" text NOT NULL,
& Nbsp; "ára" dupla pontosságú NOT NULL
)
;
COMMIT;
Megjegyzés: * A Transmeta teremt egy oszlop minden nyelven. Ne aggódj igénylő új nyelvek a jövőben a Transmeta megoldja ezt a problémát az Ön számára. * Ha egy mező null = False, és nincs alapértelmezett értéke, a Transmeta teremt csak egy NOT NULL mezőt, az alapértelmezett nyelv. Fields más másodlagos nyelv tökéletes lehet üres. Továbbá, az elsődleges nyelv lesz szükség az admin app, míg a más területeken választható lesz (üres = True). Ez azért történt így, mert az általános eljárás a tartalom fordítás először felvenni a tartalom a fő nyelv és később kell fordítók lefordítani más nyelvekre. * A felhasznált ./manage.py syncdb létrehozni adatbázis séma.
Játszik a python shell
A Transmeta teremt egy mezőt minden rendelkezésre álló nyelven minden fordítható területen meghatározott modell. Mezőnevek utótagot nyelvű rövid kódok, pl: description_es, description_en, és így tovább. Ezen kívül létrehoz egy field_name getter letölteni a mező értéke az aktív nyelvet.
Játsszunk egy kicsit a python shell, hogy a legjobb megérteni, hogyan is működik ez:
& Gt; & gt; & gt; a fooapp.models importálni Book
& Gt; & gt; & gt; b = Book.objects.create (description_es = u'mi descripcion ", description_en = u'my leírás)
& Gt; & gt; & gt; b.description
u'my leírás "
& Gt; & gt; & gt; a django.utils.translation import aktiválhatják
& Gt; & gt; & gt; aktiválja ("es")
& Gt; & gt; & gt; b.description
u'mi descripcion "
& Gt; & gt; & gt; b.description_en
u'my leírás "
Hozzátéve, az új nyelveken
Ha kell új nyelvet a meglévők csak akkor kell változtatni a settings.py és kérje a Transmeta szinkronizálni a DB újra. Például, hogy adjunk francia projektünk, meg kell, hogy adja hozzá Nyelvek settings.py:
NYELVEK = (
& Nbsp; ("es", ugettext ("spanyol")),
& Nbsp; ("en", ugettext ("English")),
& Nbsp; ("fr", ugettext ('francia')),
)
És végre egy speciális sync_transmeta_db parancsot:
& Nbsp; ./ manage.py sync_transmeta_db
Hiányzó nyelvek "leírása" mezőben a "fooapp.book" modell: fr
SQL szinkronizálni "fooapp.book" séma:
& Nbsp; ALTER TABLE "fooapp_book" Oszlop hozzáadása "description_fr" text
Biztos benne, hogy végre szeretne hajtani az előző SQL: (y / n) [n]: y
Végrehajtó SQL ... Kész
Hiányzó nyelvek "test" mező "fooapp.book" modell: fr
SQL szinkronizálni "fooapp.book" séma:
& Nbsp; ALTER TABLE "fooapp_book" Oszlop hozzáadása "body_fr" text
Biztos benne, hogy végre szeretne hajtani az előző SQL: (y / n) [n]: y
Végrehajtó SQL ... Kész
És kész!
Hozzátéve, az új fordítható mezők
Most képzeld el, hogy több hónap után ezzel a web app (a sok könyvet létre), meg kell, hogy könyv ára fordítható (például azért, mert a könyv ára attól függ, hogy az árfolyam).
Ennek elérése érdekében először hozzá árának a modell fordítható területek listája:
Könyv osztály (models.Model):
& Nbsp; ...
& Nbsp; ár = models.FloatField ()
& Nbsp; class Meta:
& Nbsp; lefordítani = ("leírás", "test", "ár",)
Minden, ami bal most hív a sync_transmeta_db paranccsal frissítheti a DB séma:
& Nbsp; ./ manage.py sync_transmeta_db
Elérhető nyelvek:
& Nbsp; 1. Spanyol
& Nbsp; 2. Angol
Válasszon egy nyelvet, amelyen az árammal le nem fordított adatok.
Mi a nyelvet a jelenlegi adatok? (1-2): 1
Hiányzó nyelvek "ár" mező "fooapp.book" modell: es, en
SQL szinkronizálni "fooapp.book" séma:
& Nbsp; ALTER TABLE "fooapp_book" Oszlop hozzáadása "price_es" dupla pontosságú
& Nbsp; UPDATE "fooapp_book" SET "price_es" = "ára"
& Nbsp; ALTER TABLE "fooapp_book" ALTER oszlop "price_es" SET NOT NULL
& Nbsp; ALTER TABLE "fooapp_book" Oszlop hozzáadása "price_en" dupla pontosságú
& Nbsp; ALTER TABLE "fooapp_book" DROP oszlop "ára"
Biztos benne, hogy végre szeretne hajtani az előző SQL: (y / n) [n]: y
Végrehajtó SQL ... Kész
Mi a fene ez a parancs nem?
sync_transmeta_db parancs nem csak teremt új adatbázis oszlopok az új fordítható terén ... ez adatokat másolni régi ár terén az egyik nyelven, és ezért parancsot kérni célnyelv terület tényleges adatokat.
Admin integráció
A Transmeta átláthatóan jeleníti meg az összes fordítható mezőket az admin felületen. Ez egyszerű, mert modellek sőt számos területen (egy-egy nyelv).
Változó formában mezőket az admin elég gyakori feladat, és a Transmeta tartalmazza a canonical_fieldname hasznossági függvény, hogy alkalmazzák ezeket a változásokat minden nyelven mezőkön egyszerre. Még mindig jobb példa szemlélteti:
a Transmeta import canonical_fieldname
osztály BookAdmin (admin.ModelAdmin):
& Nbsp; def formfield_for_dbfield (self, db_field, ** kwargs):
& Nbsp; field = super (BookAdmin, self) .formfield_for_dbfield (db_field, ** kwargs)
& Nbsp; db_fieldname = canonical_fieldname (db_field)
& Nbsp; Ha db_fieldname == "leírás":
& Nbsp; # ez vonatkozik minden description_ * mezők
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; elif field.name == 'body_es ":
& Nbsp; # ez csak a body_es téren
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; visszatérése terén
Tulajdonságok :
- Automatikus séma alkotás fordítható területeken.
- Lefordítható mezőket integrált Django admin felületen.
- Command szinkronizálni adatbázis séma, hogy új fordítható mezők és új nyelveket.
Mi az új ebben a kiadásban:
- Added get_mandatory_fieldname funkciót.
Mi az új verzióban 0.6.9:
- Támogatás módszert get_field_language a mezőneveket aláhúzás
Mi az új verzióban 0.6.8:
- Fix egy kis hiba a parancs sync_transmeta_db (UnboundLocalError: helyi változó "f" bázis előtt hozzárendelés)
Mi az új verzióban 0.6.7:
- Módosítsa a képviselet (verbose_name) a Transmeta címkék
Mi az új verzióban 0.6.6:
- Fejlesztések és a használhatóság parancs sync_transmeta_db
- Fix néhány hiba
- Dokumentáció
Mi az új verzióban 0.6.5:
- Fejlesztések és a használhatóság parancs sync_transmeta_db
- Működik az utolsó Django (a parancs sync_transmeta_db)
- Működik a mysql (a parancs sync_transmeta_db)
Mi az új verzióban 0.6.4:
- javítások hiba öröksége modellek.
Mi az új verzióban 0.6.3:
- Hagyjuk, hogy egy TRANSMETA_LANGUAGES beállításokat.
- Added két lehetőség sync_transmeta_db: -y (feltételezzük, igen minden) és -d (alapértelmezett nyelv kód)
Mi az új verzióban 0.6.2:
- működik, ha alap helyi helyesírási változatokat, mint es-ES vagy en-US.
követelmények :
- Django
- Python
Hozzászólás nem található