Bumalik sa blog

Paano I-translate ang Django Database Content gamit ang AI

2026-02-18 9 min na pagbabasa
Paano I-translate ang Django Database Content gamit ang AI

Kung nakatrabaho ka na sa built-in na internationalization (i18n) framework ng Django, alam mong mahusay itong nagha-handle ng mga static string. Ang pag-wrap ng teksto sa gettext() o paggamit ng {% trans %} template tag ay nag-e-extract ng mga string sa .po files, na pinupunan ng mga tagapagsalin. Ang sistema ay battle-tested at gumagana nang mahusay para sa code at templates.

Pero paano ang content na naka-store sa iyong database?

Mga pangalan ng produkto, mga pamagat ng artikulo, mga paglalarawan ng kategorya, mga sagot sa FAQ, user-generated content. Wala sa mga ito ang nasa iyong source code. Hindi ito mahahanap ng makemessages command ng Django, at hindi ka matutulungan ng .po files dito. Kung ang iyong application ay nagse-serve ng dynamic content sa mga user sa maraming wika, kailangan mo ng ibang stratehiya.

Ganito gawin: gamitin ang django-modeltranslation para magdagdag ng translatable fields sa iyong mga model, pagkatapos i-automate ang translation gamit ang AI sa pamamagitan ng TranslateBot.

Mga Django Database Translation Package

Ilang third-party package ang lumulutas sa database translation problem, bawat isa ay may iba't ibang arkitektura.

django-modeltranslation

Nagdadagdag ng language-specific columns direkta sa iyong mga existing table. Ang title field ay nagiging title_en, title_de, title_fr, at iba pa. Mabilis pa rin ang mga query dahil lahat ay nasa iisang table. Ipinapakita ng admin interface ang lahat ng wika nang magkatabi.

django-parler

Gumagawa ng hiwalay na translation table para sa bawat model. Nananatiling malinis ang original table, at ang mga translation ay naka-store sa related table na connected sa pamamagitan ng foreign key.

django-translations

Gumagamit ng iisang translations table na may generic foreign key na tumuturo sa kahit anong model. Lahat ng translation para sa lahat ng model ay napupunta sa isang table.

Manual JSON Field

Maaari mong i-store ang mga translation sa JSONField:

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

Alin ang Dapat Mong Gamitin?

Para sa karamihan ng mga proyekto, ang django-modeltranslation ang pinakamagandang pagpipilian. Ito ang pinaka-mature na package, may pinakamagandang Django admin integration, at pinapanatili ang lahat ng data sa iisang table para sa mabilis na query. Ang tradeoff (mas malapad na table at migration para sa bawat bagong wika) ay manageable para sa karamihan ng mga application. Ang natitira sa gabay na ito ay gumagamit ng django-modeltranslation.

Pag-setup ng django-modeltranslation Step by Step

Step 1: I-install ang Package

Bina-bundle ng TranslateBot ang django-modeltranslation bilang optional dependency. I-install ang dalawa nang sabay:

pip install translatebot-django[modeltranslation]

O kung gumagamit ka ng uv:

uv add --dev translatebot-django[modeltranslation]

Step 2: I-configure ang Django Settings

Dalawang bagay ang mahalaga sa settings.py: ang app order at ang language list.

# 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'),
]

Ang modeltranslation app ay dapat na mauna bago ang django.contrib.admin para ma-patch nito ang admin classes para ipakita ang translation fields.

Step 3: I-register ang mga Model para sa Translation

Gumawa ng translation.py file sa bawat app na may translatable models. Para sa isang e-commerce shop app:

# 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')

Isama lang ang mga field na naglalaman ng human-readable text. Huwag i-register ang mga field tulad ng slug, price, o sku.

Step 4: Gumawa at Patakbuhin ang mga Migration

python manage.py makemigrations
python manage.py migrate

Pagkatapos nito, ang iyong shop_product table ay may mga bagong column:

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

Bawat wika na iyong na-define sa LANGUAGES ay nakakakuha ng sariling column para sa bawat registered field.

Ang Problema: Mga Walang Laman na Translation Field

Mayroon ka nang schema, pero bawat _de, _fr, at _nl column ay walang laman. Kung mayroon kang 500 produkto na may 3 translatable field at 3 target na wika, iyon ay 4,500 walang laman na field na naghihintay na mapunan.

Hindi realistic ang manual na pagsasalin ng content na iyon. Kahit may professional translation service, kailangan mong i-export ang data, ipadala ito, hintayin ang delivery, at i-import ang mga resulta. Para sa isang maliit na team o solo developer, ito ay karaniwang nangangahulugan na hindi kailanman inilalabas ang feature.

Dito pumapasok ang TranslateBot.

Pag-automate ng mga Translation gamit ang TranslateBot

Ang translate management command ng TranslateBot ay maaaring punan ang lahat ng walang laman na field gamit ang AI. I-configure muna ang iyong API key:

# settings.py

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

Pagkatapos, i-translate ang lahat ng registered model sa target language:

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

Ang isang command na iyon ay hinahanap ang bawat model na registered sa django-modeltranslation, tinutukoy ang mga field na walang laman para sa target language, at pinupunan ang mga ito ng AI-generated translations.

I-translate ang mga Specific Model

Kung gusto mo lang i-translate ang mga produkto at hindi ang mga kategorya:

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

O maraming specific model:

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

Preview gamit ang Dry Run

Laging mag-preview bago magsulat sa database:

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

Ipinapakita nito nang eksakto kung ano ang ita-translate nang hindi binabago ang anumang record.

I-re-translate ang Existing Content

Bilang default, nilalaktawan ng TranslateBot ang mga field na mayroon nang translation. Para i-overwrite ang mga existing translation (halimbawa, pagkatapos mapahusay ang iyong AI model o magdagdag ng context):

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

I-translate ang Lahat ng Wika nang Sabay-sabay

Kung aalisin mo ang --target-lang at may LANGUAGES na na-define sa iyong settings, ang TranslateBot ay nagta-translate sa lahat ng na-configure na wika:

python manage.py translate --models

Paano Gumagana ang Translation Pipeline

Ito ang nangyayari kapag pinatakbo mo ang translate command.

  1. Discovery. Kino-query ng TranslateBot ang registry ng django-modeltranslation para hanapin ang lahat ng registered model at ang kanilang mga translatable field.

  2. Source detection. Para sa bawat record, binabasa nito ang source content. Una nitong tine-check ang base field (hal., name), pagkatapos bumabalik sa unang populated na language-specific field (hal., name_en). Nilalaktawan ang mga record na walang source content.

  3. Batching. Ang mga record ay pinagsasama-sama sa mga batch at ipinapadala sa AI provider. Pinapanatili nitong efficient ang mga API call at iniiwasan ang pag-hit sa rate limits.

  4. Translation. Bawat batch ay tina-translate gamit ang na-configure na AI model. Maaari kang gumamit ng kahit anong LLM provider na sinusuportahan ng LiteLLM (OpenAI, Anthropic, Google, Azure, at marami pang iba) o DeepL.

  5. Atomic writes. Lahat ng database update para sa isang translation run ay naka-wrap sa iisang transaction. Kung may mali, tulad ng API error o database constraint violation, walang partial data na nase-save. Lahat o wala.

Kumpletong Workflow Example

Narito ang isang kumpletong halimbawa mula sa model definition hanggang sa translated content, gamit ang isang e-commerce Product model.

I-define ang 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

I-register para sa Translation

# shop/translation.py

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


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

Patakbuhin ang mga Migration

python manage.py makemigrations shop
python manage.py migrate

Magdagdag ng Translation Context (Opsyonal)

Gumawa ng TRANSLATING.md file sa project root mo para bigyan ng context ang AI tungkol sa iyong product domain:

# 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

I-translate

# 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

I-verify sa Admin

Buksan ang Django admin at pumunta sa kahit anong produkto. Makikita mo ang mga translation field na napunan:

Ulitin para sa bawat target language:

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

O i-translate ang lahat ng wika nang sabay:

python manage.py translate --models Product

Mga Best Practice

I-back up ang iyong database bago magpatakbo ng bulk translation sa production. Gumagamit ang TranslateBot ng atomic transactions, kaya ang isang failed run ay hindi mag-iiwan ng partial data. Pero ang pagkakaroon ng backup ay nagbibigay sa iyo ng paraan para bumalik kung ang translation quality ay hindi tulad ng inaasahan mo.

# PostgreSQL example
pg_dump mydb > backup_before_translation.sql

Gamitin muna ang dry run. Laging patakbuhin gamit ang --dry-run bago mag-apply ng translations sa bagong model o wika. I-review ang output para matiyak na tama ang pagka-detect ng source content at makatuwiran ang mga translation.

Mag-translate ng isang model sa isang pagkakataon para sa malalaking database. Pinapadali nito ang pag-review ng mga resulta at pag-re-run ng mga specific model kung kinakailangan.

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

Magdagdag ng translation context. Ang TRANSLATING.md file na may domain-specific terminology at tone guidelines ay lubos na nagpapahusay sa translation quality. Ito ay lalong mahalaga para sa mga specialized field tulad ng medisina, batas, o technical products.

Panatilihing puno ang iyong source language. Nagbabasa ang TranslateBot mula sa base field o source language field. Tiyaking palaging pinupunan ng iyong data entry workflow ang source language. Ang mga walang laman na source field ay nangangahulugan ng walang laman na translation.

Pagsamahin sa PO file translation para sa buong coverage. I-translate ang parehong code string at database content:

# 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

Sa ganitong paraan, bawat string na makikita ng iyong mga user, mula man sa template o database, ay naisalin na.

Mga Susunod na Hakbang

Itigil ang manu-manong pag-edit ng .po files

Ino-automate ng TranslateBot ang mga pagsasalin ng Django gamit ang AI. Isang command, lahat ng iyong mga wika, sentimo bawat pagsasalin.