Django-Transmeta adalah aplikasi Django untuk konten diterjemahkan dalam model Django & nbsp;. Setiap bahasa disimpan dan dikelola secara otomatis dalam kolom yang berbeda pada tingkat database.
Menggunakan Transmeta strong>
Menciptakan model-model diterjemahkan
Lihatlah model ini:
class Book (models.Model):
& Nbsp; title = models.CharField (max_length = 200)
& Nbsp; description = models.TextField ()
& Nbsp; body = models.TextField (default = '')
& Nbsp; harga = models.FloatField ()
Misalkan Anda ingin membuat deskripsi dan diterjemahkan tubuh. Model yang dihasilkan setelah menggunakan Transmeta adalah:
dari Transmeta impor Transmeta
class Book (models.Model):
& Nbsp; __ metaclass__ = Transmeta
& Nbsp; title = models.CharField (max_length = 200)
& Nbsp; description = models.TextField ()
& Nbsp; body = models.TextField (default = '')
& Nbsp; harga = models.FloatField ()
& Nbsp; class Meta:
& Nbsp; menerjemahkan = ('description', 'tubuh',)
Pastikan Anda telah menetapkan standar dan tersedia bahasa settings.py Anda:
LANGUAGE_CODE = 'es'
ugettext = lambda s: s # boneka ugettext fungsi, sebagai docs Django mengatakan
BAHASA = (
& Nbsp; ('es', ugettext ('Spanyol')),
& Nbsp; ('en', ugettext ('English')),
)
Ini adalah SQL dihasilkan dengan perintah sqlall ./manage.py:
BEGIN;
CREATE TABLE "fooapp_book" (
& Nbsp; "id" seri NOT NULL PRIMARY KEY,
& Nbsp; "title" varchar (200) NOT NULL,
& Nbsp; "description_en" teks,
& Nbsp; "description_es" text NOT NULL,
& Nbsp; "body_es" text NOT NULL,
& Nbsp; "body_en" text NOT NULL,
& Nbsp; "harga" presisi ganda NOT NULL
)
;
COMMIT;
Catatan: * Transmeta menciptakan satu kolom untuk setiap bahasa. Jangan khawatir tentang perlu bahasa baru di masa depan, Transmeta memecahkan masalah ini untuk Anda. * Jika salah satu bidang adalah nol = False dan tidak memiliki nilai default, Transmeta akan membuat hanya satu bidang NOT NULL, untuk bahasa default. Fields untuk bahasa sekunder lainnya akan nullable. Juga, bahasa utama akan diperlukan dalam aplikasi admin, sedangkan bidang lain akan opsional (dengan kosong = True). Ini dilakukan agar karena pendekatan normal untuk terjemahan konten pertama menambahkan konten dalam bahasa utama dan kemudian memiliki penerjemah menerjemahkan ke dalam bahasa lain. * Anda dapat menggunakan syncdb ./manage.py untuk membuat skema database.
Bermain di shell python
Transmeta menciptakan satu lapangan untuk setiap bahasa yang tersedia untuk setiap bidang diterjemahkan didefinisikan dalam model. Nama field yang bersufiks dengan kode bahasa yang singkat, misalnya: description_es, description_en, dan sebagainya. Selain itu menciptakan pengambil nama_kolom untuk mengambil nilai field dalam bahasa aktif.
Mari kita bermain sedikit di shell python untuk memahami bagaimana ini bekerja terbaik:
& Gt; & gt; & gt; dari fooapp.models Buku impor
& Gt; & gt; & gt; b = Book.objects.create (description_es = u'mi Descripción ', description_en = u'my description')
& Gt; & gt; & gt; b.description
deskripsi u'my '
& Gt; & gt; & gt; dari django.utils.translation impor mengaktifkan
& Gt; & gt; & gt; aktifkan ('es')
& Gt; & gt; & gt; b.description
u'mi Descripción '
& Gt; & gt; & gt; b.description_en
deskripsi u'my '
Menambahkan bahasa baru
Jika Anda perlu menambahkan bahasa baru dengan yang sudah ada Anda hanya perlu mengubah settings.py Anda dan meminta Transmeta untuk melakukan sinkronisasi DB lagi. Misalnya, untuk menambahkan Prancis ke proyek kami, Anda harus menambahkannya ke BAHASA di settings.py:
BAHASA = (
& Nbsp; ('es', ugettext ('Spanyol')),
& Nbsp; ('en', ugettext ('English')),
& Nbsp; ('fr', ugettext ('Prancis')),
)
Dan menjalankan perintah sync_transmeta_db khusus:
& Nbsp; ./ manage.py sync_transmeta_db
Bahasa yang hilang dalam "description" lapangan dari "fooapp.book" model: fr
SQL untuk menyinkronkan "fooapp.book" skema:
& Nbsp; ALTER TABLE "fooapp_book" ADD KOLOM "description_fr" text
Apakah Anda yakin bahwa Anda ingin menjalankan SQL sebelumnya: (y / n) [n]: y
Pelaksana SQL ... Selesai
Bahasa yang hilang dalam "tubuh" lapangan dari "fooapp.book" model: fr
SQL untuk menyinkronkan "fooapp.book" skema:
& Nbsp; ALTER TABLE "fooapp_book" ADD KOLOM "body_fr" text
Apakah Anda yakin bahwa Anda ingin menjalankan SQL sebelumnya: (y / n) [n]: y
Pelaksana SQL ... Selesai
Dan dilakukan!
Menambahkan bidang diterjemahkan baru
Sekarang bayangkan bahwa, setelah beberapa bulan menggunakan aplikasi web ini (dengan banyak buku dibuat), Anda perlu membuat diterjemahkan harga buku (misalnya karena harga buku tergantung pada mata uang).
Untuk mencapai hal ini, pertama kali menambahkan harga ke daftar bidang diterjemahkan model:
class Book (models.Model):
& Nbsp; ...
& Nbsp; harga = models.FloatField ()
& Nbsp; class Meta:
& Nbsp; menerjemahkan = ('description', 'tubuh', 'harga',)
Semua yang tersisa sekarang adalah memanggil perintah sync_transmeta_db untuk memperbarui skema DB:
& Nbsp; ./ manage.py sync_transmeta_db
Bahasa yang tersedia:
& Nbsp; 1. Spanyol
& Nbsp; 2. Bahasa Inggris
Pilih bahasa di mana untuk menempatkan data diterjemahkan saat ini.
Apa bahasa data saat ini? (1-2): 1
Bahasa yang hilang dalam "harga" lapangan dari "fooapp.book" model: es, en
SQL untuk menyinkronkan "fooapp.book" skema:
& Nbsp; ALTER TABLE "fooapp_book" ADD KOLOM "price_es" presisi ganda
& Nbsp; UPDATE "fooapp_book" SET "price_es" = "harga"
& Nbsp; ALTER TABLE "fooapp_book" ALTER KOLOM "price_es" SET TIDAK NULL
& Nbsp; ALTER TABLE "fooapp_book" ADD KOLOM "price_en" presisi ganda
& Nbsp; ALTER TABLE "fooapp_book" DROP KOLOM "harga"
Apakah Anda yakin bahwa Anda ingin menjalankan SQL sebelumnya: (y / n) [n]: y
Pelaksana SQL ... Selesai
Apa sih perintah ini tidak?
perintah sync_transmeta_db tidak hanya menciptakan kolom database baru untuk bidang diterjemahkan baru ... itu menyalin data dari lapangan harga lama menjadi salah satu bahasa, dan itulah sebabnya perintah meminta Anda untuk bidang bahasa tujuan untuk data aktual.
Integrasi Admin
Transmeta transparan menampilkan semua bidang diterjemahkan ke dalam antarmuka admin. Hal ini mudah karena model pada kenyataannya banyak bidang (satu untuk setiap bahasa).
Mengubah kolom formulir di admin adalah tugas yang cukup umum, dan Transmeta termasuk fungsi utilitas canonical_fieldname untuk menerapkan perubahan ini untuk semua bidang bahasa sekaligus. Ini lebih baik dijelaskan dengan sebuah contoh:
dari Transmeta impor canonical_fieldname
Kelas BookAdmin (admin.ModelAdmin):
& Nbsp; def formfield_for_dbfield (self, db_field, ** kwargs):
& Nbsp; bidang = super (BookAdmin, self) .formfield_for_dbfield (db_field, ** kwargs)
& Nbsp; db_fieldname = canonical_fieldname (db_field)
& Nbsp; jika db_fieldname == 'description':
& Nbsp; # ini berlaku untuk semua * Bidang description_
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; elif field.name == 'body_es':
& Nbsp; # ini hanya berlaku untuk bidang body_es
& Nbsp; field.widget = MyCustomWidget ()
& Nbsp; bidang pengembalian
Fitur :
- pembuatan skema otomatis dengan bidang diterjemahkan.
- Bidang diterjemahkan diintegrasikan ke antarmuka admin Django.
- Perintah untuk menyinkronkan database skema untuk menambahkan kolom diterjemahkan baru dan bahasa baru.
Apa yang baru dalam rilis ini:
- Ditambahkan get_mandatory_fieldname fungsi.
Apa yang baru dalam versi 0.6.9:
- Dukungan dalam metode get_field_language untuk nama field dengan garis bawah
Apa yang baru dalam versi 0.6.8:
- Memperbaiki bug kecil di perintah sync_transmeta_db (UnboundLocalError: variabel lokal 'f' direferensikan sebelum penugasan)
Apa yang baru dalam versi 0.6.7:
- Ubah representasi (verbose_name) dari label Transmeta li>
Apa yang baru dalam versi 0.6.6:
- Perbaikan dan kegunaan dalam perintah sync_transmeta_db
- Perbaiki beberapa bug
- Dokumentasi
Apa yang baru dalam versi 0.6.5:
- Perbaikan dan kegunaan dalam perintah sync_transmeta_db
- Bekerja dengan Django terakhir (perintah sync_transmeta_db)
- Bekerja dengan mysql (perintah sync_transmeta_db)
Apa yang baru dalam versi 0.6.4:
- error Perbaikan dengan warisan dalam model.
Apa yang baru dalam versi 0.6.3:
- Izinkan untuk menggunakan pengaturan TRANSMETA_LANGUAGES.
- Ditambahkan dua pilihan untuk sync_transmeta_db: -y (asumsikan ya pada semua) dan -d (kode bahasa default)
Apa yang baru dalam versi 0.6.2:
- Bekerja ketika lokal default memiliki varian ejaan sebagai es-ES atau en-US.
Persyaratan :
- Django
- Python
Komentar tidak ditemukan