Bali menyang blog

Cara Nerjemahake Konten Database Django nganggo AI

2026-02-18 8 menit maca
Cara Nerjemahake Konten Database Django nganggo AI

Yen sampeyan wis tau nggarap framework internasionalisasi (i18n) bawaan Django, sampeyan ngerti yen iku nangani string statis kanthi apik. Mbungkus teks ing gettext() utawa nggunakake tag template {% trans %} ngekstrak string menyang file .po, sing banjur diisi dening penerjemah. Sistem iki wis teruji lan bisa digunakake kanthi apik kanggo kode lan template.

Nanging kepiye karo konten sing disimpen ing database sampeyan?

Jeneng produk, judul artikel, deskripsi kategori, jawaban FAQ, konten sing digawe pangguna. Ora ana sing manggon ing kode sumber sampeyan. Perintah makemessages Django ora bakal nemokake, lan file .po ora bisa nulungi sampeyan ing kene. Yen aplikasi sampeyan nyediakake konten dinamis menyang pangguna ing pirang-pirang basa, sampeyan butuh strategi sing beda.

Mangkene carane nindakake: gunakake django-modeltranslation kanggo nambahake field sing bisa diterjemahake menyang model sampeyan, banjur otomatisasi terjemahan nganggo AI nggunakake TranslateBot.

Paket Terjemahan Database Django

Sawetara paket pihak ketiga ngatasi masalah terjemahan database, saben duwe arsitektur sing beda.

django-modeltranslation

Nambahake kolom khusus basa langsung menyang tabel sing wis ana. Field title dadi title_en, title_de, title_fr, lan sapiturute. Kueri tetep cepet amarga kabeh ana ing tabel sing padha. Antarmuka admin nuduhake kabeh basa ing jejer.

django-parler

Nggawe tabel terjemahan kapisah kanggo saben model. Tabel asli tetep resik, lan terjemahan disimpen ing tabel sing gegandhengan liwat foreign key.

django-translations

Nggunakake tabel terjemahan tunggal kanthi generic foreign key sing nuduhake bali menyang model apa wae. Kabeh terjemahan kanggo kabeh model mlebu ing siji tabel.

Field JSON Manual

Sampeyan bisa nyimpen terjemahan ing JSONField:

class Product(models.Model):
    name_translations = models.JSONField(default=dict)
    # {"en": "Running Shoes", "de": "Laufschuhe", "fr": "Chaussures de course"}

Sing Endi Sing Kudu Digunakake?

Kanggo pirang-pirang proyek, django-modeltranslation minangka pilihan sing paling apik. Iki paket sing paling mateng, duwe integrasi admin Django sing paling apik, lan njaga kabeh data ing tabel sing padha kanggo kueri cepet. Kompromi (tabel sing luwih amba lan migrasi kanggo saben basa anyar) bisa ditangani kanggo mayoritas aplikasi. Sisane pandhuan iki nggunakake django-modeltranslation.

Nyetel django-modeltranslation Langkah demi Langkah

Langkah 1: Instal Paket

TranslateBot nggabungake django-modeltranslation minangka dependensi opsional. Instal loro-lorone sekaligus:

pip install translatebot-django[modeltranslation]

Utawa yen sampeyan nggunakake uv:

uv add --dev translatebot-django[modeltranslation]

Langkah 2: Konfigurasi Setelan Django

Loro perkara sing penting ing settings.py: urutan app lan dhaptar basa.

# settings.py

INSTALLED_APPS = [
    'modeltranslation',          # Must be BEFORE django.contrib.admin
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Your apps
    'shop',
    'translatebot_django',
]

LANGUAGE_CODE = 'en'

LANGUAGES = [
    ('en', 'English'),
    ('de', 'German'),
    ('fr', 'French'),
    ('nl', 'Dutch'),
]

App modeltranslation kudu ana sadurunge django.contrib.admin supaya bisa nge-patch kelas admin kanggo nuduhake field terjemahan.

Langkah 3: Ndaftarake Model kanggo Terjemahan

Gawe file translation.py ing saben app sing duwe model sing bisa diterjemahake. Kanggo app toko e-commerce:

# shop/translation.py

from modeltranslation.translator import register, TranslationOptions
from .models import Product, Category


@register(Product)
class ProductTranslationOptions(TranslationOptions):
    fields = ('name', 'description', 'short_description')


@register(Category)
class CategoryTranslationOptions(TranslationOptions):
    fields = ('name', 'description')

Mung lebokake field sing ngemot teks sing bisa diwaca manungsa. Aja ndaftarake field kayata slug, price, utawa sku.

Langkah 4: Gawe lan Jalanake Migrasi

python manage.py makemigrations
python manage.py migrate

Sawise iki, tabel shop_product sampeyan duwe kolom anyar:

Column Type
name varchar(200)
name_en varchar(200)
name_de varchar(200)
name_fr varchar(200)
name_nl varchar(200)
description text
description_en text
description_de text
description_fr text
description_nl text
short_description text
short_description_en text
short_description_de text
short_description_fr text
short_description_nl text

Saben basa sing sampeyan definisikake ing LANGUAGES entuk kolom dhewe kanggo saben field sing didaftarake.

Masalahe: Field Terjemahan Kosong

Saiki sampeyan wis duwe skema, nanging saben kolom _de, _fr, lan _nl isih kosong. Yen sampeyan duwe 500 produk kanthi 3 field sing bisa diterjemahake lan 3 basa target, iku 4.500 field kosong sing nunggu diisi.

Nerjemahake konten kasebut kanthi manual ora realistis. Sanajan nganggo layanan terjemahan profesional, sampeyan kudu ngekspor data, ngirim, nunggu kiriman, lan ngimpor asile maneh. Kanggo tim cilik utawa pengembang tunggal, iki biasane tegese fitur kasebut ora tau diluncurake.

Ing kene TranslateBot mlebu.

Ngotomatisasi Terjemahan nganggo TranslateBot

Perintah manajemen translate TranslateBot bisa ngisi kabeh field kosong kasebut nggunakake AI. Konfigurasi kunci API sampeyan dhisik:

# settings.py

TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"  # Fast and cost-effective

Banjur terjemahake kabeh model sing didaftarake menyang basa target:

python manage.py translate --target-lang de --models

Perintah tunggal kasebut nemokake saben model sing didaftarake ing django-modeltranslation, ngenali field sing kosong kanggo basa target, lan ngisi kanthi terjemahan sing digawe AI.

Nerjemahake Model Spesifik

Yen sampeyan mung pengin nerjemahake produk lan dudu kategori:

python manage.py translate --target-lang de --models Product

Utawa pirang-pirang model spesifik:

python manage.py translate --target-lang de --models Product Category

Pratinjau kanthi Dry Run

Tansah pratinjau sadurunge nulis menyang database:

python manage.py translate --target-lang de --models --dry-run

Iki nuduhake persis apa sing bakal diterjemahake tanpa ngowahi rekaman apa wae.

Nerjemahake Maneh Konten Sing Wis Ana

Kanthi default, TranslateBot ngliwati field sing wis duwe terjemahan. Kanggo nimpa terjemahan sing wis ana (contone, sawise nambah apik model AI utawa nambah konteks):

python manage.py translate --target-lang de --models --overwrite

Nerjemahake Kabeh Basa Sekaligus

Yen sampeyan ngilangi --target-lang lan wis nemtokake LANGUAGES ing setelan, TranslateBot nerjemahake menyang kabeh basa sing dikonfigurasi:

python manage.py translate --models

Cara Kerja Pipeline Terjemahan

Mangkene sing kedadeyan nalika sampeyan njalanake perintah translate.

  1. Penemuan. TranslateBot nge-kueri registri django-modeltranslation kanggo nemokake kabeh model sing didaftarake lan field sing bisa diterjemahake.

  2. Deteksi sumber. Kanggo saben rekaman, maca konten sumber. Mriksa field dasar dhisik (contone, name), banjur mundur menyang field khusus basa sing pertama diisi (contone, name_en). Rekaman tanpa konten sumber diliwati.

  3. Batching. Rekaman diklompokake dadi batch lan dikirim menyang panyedia AI. Iki njaga panggilan API tetep efisien lan nyegah kena watesan tarif.

  4. Terjemahan. Saben batch diterjemahake nggunakake model AI sing dikonfigurasi. Sampeyan bisa nggunakake panyedia LLM apa wae sing didhukung LiteLLM (OpenAI, Anthropic, Google, Azure, lan akeh liyane) utawa DeepL.

  5. Penulisan atomik. Kabeh pembaruan database kanggo sesi terjemahan dibungkus ing siji transaksi. Yen ana masalah, kayata kesalahan API utawa pelanggaran batasan database, ora ana data parsial sing disimpen. Kabeh utawa ora ana.

Conto Alur Kerja Lengkap

Mangkene conto lengkap saka definisi model nganti konten sing diterjemahake, nggunakake model Product e-commerce.

Definisikake Model

# shop/models.py

from django.db import models


class Product(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField()
    short_description = models.CharField(max_length=500, blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    sku = models.CharField(max_length=50, unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

Ndaftarake kanggo Terjemahan

# shop/translation.py

from modeltranslation.translator import register, TranslationOptions
from .models import Product


@register(Product)
class ProductTranslationOptions(TranslationOptions):
    fields = ('name', 'description', 'short_description')

Jalanake Migrasi

python manage.py makemigrations shop
python manage.py migrate

Tambahake Konteks Terjemahan (Opsional)

Gawe file TRANSLATING.md ing root proyek sampeyan kanggo menehi AI konteks babagan domain produk sampeyan:

# Translation Context

## About This Project
E-commerce store for outdoor sports equipment.

## Terminology
- "trail runners" refers to trail running shoes, not people
- Keep brand names (Nike, Salomon, Arc'teryx) untranslated
- "Gore-Tex" is a brand name, do not translate

## Tone
- Use informal "du" form in German
- Product descriptions should sound enthusiastic but not exaggerated

Terjemahake

# Preview first
python manage.py translate --target-lang de --models Product --dry-run

# Apply translations
python manage.py translate --target-lang de --models Product

Output:

Translating Product model fields to German (de)...
Found 142 products with untranslated fields
Translating batch 1/15...
Translating batch 2/15...
...
Translating batch 15/15...
Successfully translated 142 products

Verifikasi ing Admin

Bukak admin Django lan pilih produk apa wae. Sampeyan bakal weruh field terjemahan sing wis diisi:

Baleni kanggo saben basa target:

python manage.py translate --target-lang fr --models Product
python manage.py translate --target-lang nl --models Product

Utawa terjemahake kabeh basa sekaligus:

python manage.py translate --models Product

Praktik Terbaik

Gawe cadangan database sampeyan sadurunge njalanake terjemahan massal ing produksi. TranslateBot nggunakake transaksi atomik, mula sesi sing gagal ora bakal ninggalake data parsial. Nanging duwe cadangan menehi sampeyan cara kanggo mbalikake yen kualitas terjemahan ora cocog karo sing sampeyan karepake.

# PostgreSQL example
pg_dump mydb > backup_before_translation.sql

Gunakake dry run dhisik. Tansah jalanake kanthi --dry-run sadurunge nerapake terjemahan menyang model utawa basa anyar. Deleng output kanggo mesthekake konten sumber dideteksi kanthi bener lan terjemahan katon wajar.

Terjemahake siji model sekaligus kanggo database gedhe. Iki luwih gampang kanggo mriksa asil lan njalanake maneh model spesifik yen perlu.

python manage.py translate --target-lang de --models Product
python manage.py translate --target-lang de --models Category
python manage.py translate --target-lang de --models Article

Tambahake konteks terjemahan. File TRANSLATING.md kanthi terminologi khusus domain lan pandhuan nada bisa nambah apik kualitas terjemahan kanthi signifikan. Iki penting banget kanggo bidang spesialis kayata kedokteran, hukum, utawa produk teknis.

Jaga basa sumber sampeyan tetep terisi. TranslateBot maca saka field dasar utawa field basa sumber. Pastekake alur kerja entri data sampeyan tansah ngisi basa sumber. Field sumber kosong tegese terjemahan kosong.

Gabungake karo terjemahan file PO kanggo jangkauan lengkap. Terjemahake string kode lan konten database:

# Static strings in code and templates
python manage.py makemessages -l de -l fr -l nl
python manage.py translate
python manage.py compilemessages

# Dynamic content in the database
python manage.py translate --models

Kanthi cara iki saben string sing dideleng pangguna, saka template utawa database, wis diterjemahake.

Langkah Sabanjure

Mandheg nyunting file .po kanthi manual

TranslateBot ngotomatisasi terjemahan Django nganggo AI. Siji printah, kabeh basa sampeyan, murah banget saben terjemahan.