بلاگ پر واپس جائیں

AI کے ساتھ Django ڈیٹابیس مواد کا ترجمہ کیسے کریں

2026-02-18 10 منٹ پڑھنے کا وقت
AI کے ساتھ Django ڈیٹابیس مواد کا ترجمہ کیسے کریں

اگر آپ نے Django کے بلٹ ان بین الاقوامیت (i18n) فریم ورک کے ساتھ کام کیا ہے، تو آپ جانتے ہیں کہ یہ جامد سٹرنگز کو اچھی طرح سنبھالتا ہے۔ ٹیکسٹ کو gettext() میں لپیٹنا یا {% trans %} ٹیمپلیٹ ٹیگ استعمال کرنا سٹرنگز کو .po فائلوں میں نکالتا ہے، جنہیں مترجمین پُر کرتے ہیں۔ یہ سسٹم جنگ میں آزمودہ ہے اور کوڈ اور ٹیمپلیٹس کے لیے بہترین کام کرتا ہے۔

لیکن آپ کے ڈیٹابیس میں محفوظ مواد کا کیا ہوگا؟

پروڈکٹ کے نام، مضامین کے عنوانات، زمرے کی تفصیلات، FAQ کے جوابات، صارف کا تخلیق کردہ مواد۔ اس میں سے کچھ بھی آپ کے سورس کوڈ میں نہیں ہے۔ Django کا makemessages کمانڈ اسے کبھی نہیں ڈھونڈ پائے گا، اور .po فائلیں یہاں آپ کی مدد نہیں کر سکتیں۔ اگر آپ کی ایپلیکیشن متعدد زبانوں میں صارفین کو متحرک مواد فراہم کرتی ہے، تو آپ کو ایک مختلف حکمت عملی کی ضرورت ہے۔

یہاں طریقہ ہے: اپنے ماڈلز میں قابل ترجمہ فیلڈز شامل کرنے کے لیے django-modeltranslation استعمال کریں، پھر TranslateBot کا استعمال کرتے ہوئے AI سے ترجمہ خودکار کریں۔

Django ڈیٹابیس ترجمہ پیکجز

کئی فریق ثالث پیکجز ڈیٹابیس ترجمے کا مسئلہ حل کرتے ہیں، ہر ایک مختلف فن تعمیر کے ساتھ۔

django-modeltranslation

آپ کی موجودہ ٹیبلز میں براہ راست زبان مخصوص کالم شامل کرتا ہے۔ ایک title فیلڈ title_en، title_de، title_fr وغیرہ بن جاتا ہے۔ کیونکہ سب کچھ ایک ہی ٹیبل میں ہوتا ہے اس لیے کوئیریز تیز رہتی ہیں۔ ایڈمن انٹرفیس تمام زبانیں ایک ساتھ دکھاتا ہے۔

django-parler

ہر ماڈل کے لیے ایک علیحدہ ترجمہ ٹیبل بناتا ہے۔ اصل ٹیبل صاف رہتی ہے، اور ترجمے فارن کی کے ذریعے جڑی ہوئی متعلقہ ٹیبل میں محفوظ ہوتے ہیں۔

django-translations

کسی بھی ماڈل کی طرف اشارہ کرنے والی جنرک فارن کی کے ساتھ ایک واحد ترجمہ ٹیبل استعمال کرتا ہے۔ تمام ماڈلز کے تمام ترجمے ایک ٹیبل میں جاتے ہیں۔

دستی JSON فیلڈ

آپ ترجمے JSONField میں محفوظ کر سکتے ہیں:

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

آپ کو کون سا استعمال کرنا چاہیے؟

زیادہ تر پروجیکٹس کے لیے، django-modeltranslation بہترین انتخاب ہے۔ یہ سب سے پختہ پیکج ہے، اس میں بہترین Django ایڈمن انضمام ہے، اور تیز کوئیریز کے لیے تمام ڈیٹا ایک ہی ٹیبل میں رکھتا ہے۔ اس کا سمجھوتہ (چوڑی ٹیبلز اور ہر نئی زبان کے لیے ایک مائیگریشن) زیادہ تر ایپلیکیشنز کے لیے قابل انتظام ہے۔ اس گائیڈ کا باقی حصہ django-modeltranslation استعمال کرتا ہے۔

مرحلہ وار django-modeltranslation سیٹ اپ

مرحلہ 1: پیکج انسٹال کریں

TranslateBot django-modeltranslation کو اختیاری انحصار کے طور پر شامل کرتا ہے۔ دونوں ایک ساتھ انسٹال کریں:

pip install translatebot-django[modeltranslation]

یا اگر آپ uv استعمال کرتے ہیں:

uv add --dev translatebot-django[modeltranslation]

مرحلہ 2: Django سیٹنگز ترتیب دیں

settings.py میں دو چیزیں اہم ہیں: ایپ کی ترتیب اور زبانوں کی فہرست۔

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

modeltranslation ایپ کو django.contrib.admin سے پہلے آنا چاہیے تاکہ یہ ترجمہ فیلڈز دکھانے کے لیے ایڈمن کلاسز کو پیچ کر سکے۔

مرحلہ 3: ترجمے کے لیے ماڈلز رجسٹر کریں

ہر ایپ میں جس میں قابل ترجمہ ماڈلز ہوں ایک translation.py فائل بنائیں۔ ایک ای کامرس شاپ ایپ کے لیے:

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

صرف وہ فیلڈز شامل کریں جن میں انسان کے پڑھنے کے قابل متن ہو۔ slug، price، یا sku جیسے فیلڈز رجسٹر نہ کریں۔

مرحلہ 4: مائیگریشنز بنائیں اور چلائیں

python manage.py makemigrations
python manage.py migrate

اس کے بعد، آپ کی shop_product ٹیبل میں نئے کالم ہوں گے:

کالم قسم
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

آپ نے LANGUAGES میں جو بھی زبان تعین کی ہے اسے ہر رجسٹرڈ فیلڈ کے لیے اپنا کالم ملتا ہے۔

مسئلہ: خالی ترجمہ فیلڈز

اب آپ کے پاس سکیما موجود ہے، لیکن ہر _de، _fr، اور _nl کالم خالی ہے۔ اگر آپ کے پاس 3 قابل ترجمہ فیلڈز اور 3 ہدف زبانوں کے ساتھ 500 پروڈکٹس ہیں، تو یہ 4,500 خالی فیلڈز ہیں جو بھرے جانے کا انتظار کر رہی ہیں۔

اس مواد کا دستی طور پر ترجمہ کرنا حقیقت پسندانہ نہیں ہے۔ پیشہ ور ترجمہ سروس کے ساتھ بھی، آپ کو ڈیٹا برآمد کرنا ہوگا، بھیجنا ہوگا، ڈیلیوری کا انتظار کرنا ہوگا، اور نتائج واپس درآمد کرنا ہوگا۔ ایک چھوٹی ٹیم یا اکیلے ڈویلپر کے لیے، اس کا عام طور پر مطلب یہ ہے کہ یہ فیچر کبھی لانچ نہیں ہوتا۔

یہاں TranslateBot کام آتا ہے۔

TranslateBot کے ساتھ ترجمے خودکار کرنا

TranslateBot کا translate مینجمنٹ کمانڈ AI استعمال کرکے ان تمام خالی فیلڈز کو بھر سکتا ہے۔ پہلے اپنی API کلید ترتیب دیں:

# settings.py

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

پھر تمام رجسٹرڈ ماڈلز کو ہدف زبان میں ترجمہ کریں:

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

وہ واحد کمانڈ django-modeltranslation کے ساتھ رجسٹرڈ ہر ماڈل تلاش کرتا ہے، ہدف زبان کے لیے خالی فیلڈز کی نشاندہی کرتا ہے، اور انہیں AI سے تیار کردہ ترجموں سے بھرتا ہے۔

مخصوص ماڈلز کا ترجمہ کریں

اگر آپ صرف پروڈکٹس کا ترجمہ کرنا چاہتے ہیں اور زمرے کا نہیں:

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

یا متعدد مخصوص ماڈلز:

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

ڈرائی رن کے ساتھ پیش نظارہ

ڈیٹابیس میں لکھنے سے پہلے ہمیشہ پیش نظارہ کریں:

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

یہ آپ کو بالکل دکھاتا ہے کہ کسی بھی ریکارڈ میں ترمیم کیے بغیر کیا ترجمہ کیا جائے گا۔

موجودہ مواد کا دوبارہ ترجمہ کریں

بطور ڈیفالٹ، TranslateBot ان فیلڈز کو چھوڑ دیتا ہے جن میں پہلے سے ترجمہ موجود ہے۔ موجودہ ترجموں کو اوور رائٹ کرنے کے لیے (مثال کے طور پر، اپنے AI ماڈل کو بہتر بنانے یا سیاق و سباق شامل کرنے کے بعد):

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

ایک ساتھ تمام زبانوں کا ترجمہ کریں

اگر آپ --target-lang چھوڑ دیں اور آپ کی سیٹنگز میں LANGUAGES تعین شدہ ہو، تو TranslateBot تمام ترتیب شدہ زبانوں میں ترجمہ کرتا ہے:

python manage.py translate --models

ترجمہ پائپ لائن کیسے کام کرتی ہے

ترجمہ کمانڈ چلانے پر یہ ہوتا ہے۔

  1. دریافت۔ TranslateBot تمام رجسٹرڈ ماڈلز اور ان کے قابل ترجمہ فیلڈز تلاش کرنے کے لیے django-modeltranslation کی رجسٹری سے استفسار کرتا ہے۔

  2. ماخذ کا پتہ لگانا۔ ہر ریکارڈ کے لیے، یہ ماخذ مواد پڑھتا ہے۔ یہ پہلے بنیادی فیلڈ (مثلاً name) چیک کرتا ہے، پھر پہلے بھرے ہوئے زبان مخصوص فیلڈ (مثلاً name_en) پر واپس آتا ہے۔ بغیر ماخذ مواد کے ریکارڈز چھوڑ دیے جاتے ہیں۔

  3. بیچنگ۔ ریکارڈز بیچوں میں گروپ کیے جاتے ہیں اور AI فراہم کنندہ کو بھیجے جاتے ہیں۔ یہ API کالز کو مؤثر رکھتا ہے اور شرح کی حدود سے ٹکرانے سے بچاتا ہے۔

  4. ترجمہ۔ ہر بیچ کا ترتیب شدہ AI ماڈل استعمال کرکے ترجمہ کیا جاتا ہے۔ آپ LiteLLM کی سپورٹ کردہ کوئی بھی LLM فراہم کنندہ (OpenAI، Anthropic، Google، Azure، اور بہت سے دیگر) یا DeepL استعمال کر سکتے ہیں۔

  5. ایٹامک رائٹس۔ ایک ترجمہ رن کی تمام ڈیٹابیس اپ ڈیٹس ایک واحد ٹرانزیکشن میں لپیٹی جاتی ہیں۔ اگر کچھ غلط ہو جائے، جیسے API ایرر یا ڈیٹابیس رکاوٹ کی خلاف ورزی، تو کوئی جزوی ڈیٹا محفوظ نہیں ہوتا۔ سب کچھ یا کچھ نہیں۔

مکمل ورک فلو مثال

یہاں ماڈل کی تعریف سے ترجمہ شدہ مواد تک مکمل مثال ہے، ایک ای کامرس Product ماڈل استعمال کرتے ہوئے۔

ماڈل تعین کریں

# 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

ترجمے کے لیے رجسٹر کریں

# shop/translation.py

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


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

مائیگریشنز چلائیں

python manage.py makemigrations shop
python manage.py migrate

ترجمہ سیاق و سباق شامل کریں (اختیاری)

اپنے پروجیکٹ روٹ میں ایک TRANSLATING.md فائل بنائیں تاکہ AI کو آپ کے پروڈکٹ ڈومین کے بارے میں سیاق و سباق مل سکے:

# 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

ترجمہ کریں

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

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

آؤٹ پٹ:

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

ایڈمن میں تصدیق کریں

Django ایڈمن کھولیں اور کسی بھی پروڈکٹ پر جائیں۔ آپ ترجمہ فیلڈز بھری ہوئی دیکھیں گے:

ہر ہدف زبان کے لیے دہرائیں:

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

یا ایک ساتھ تمام زبانوں کا ترجمہ کریں:

python manage.py translate --models Product

بہترین طریقے

پروڈکشن پر بلک ترجمے چلانے سے پہلے اپنے ڈیٹابیس کا بیک اپ لیں۔ TranslateBot ایٹامک ٹرانزیکشنز استعمال کرتا ہے، اس لیے ناکام رن جزوی ڈیٹا نہیں چھوڑے گا۔ لیکن بیک اپ رکھنا آپ کو واپس جانے کا راستہ دیتا ہے اگر ترجمے کا معیار آپ کی توقعات کے مطابق نہ ہو۔

# PostgreSQL example
pg_dump mydb > backup_before_translation.sql

پہلے ڈرائی رن استعمال کریں۔ نئے ماڈل یا زبان پر ترجمے لاگو کرنے سے پہلے ہمیشہ --dry-run کے ساتھ چلائیں۔ آؤٹ پٹ کا جائزہ لیں تاکہ یقینی بنایا جا سکے کہ ماخذ مواد صحیح طریقے سے پتہ لگایا گیا ہے اور ترجمے معقول نظر آتے ہیں۔

بڑے ڈیٹابیسز کے لیے ایک وقت میں ایک ماڈل کا ترجمہ کریں۔ اس سے نتائج کا جائزہ لینا آسان ہوتا ہے اور ضرورت پڑنے پر مخصوص ماڈلز کو دوبارہ چلانا۔

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

ترجمہ سیاق و سباق شامل کریں۔ ڈومین مخصوص اصطلاحات اور لہجے کی رہنمائیوں والی TRANSLATING.md فائل ترجمے کے معیار کو نمایاں طور پر بہتر بناتی ہے۔ یہ خاص طور پر طب، قانون، یا تکنیکی مصنوعات جیسے مخصوص شعبوں کے لیے اہم ہے۔

اپنی ماخذ زبان بھری رکھیں۔ TranslateBot بنیادی فیلڈ یا ماخذ زبان فیلڈ سے پڑھتا ہے۔ یقینی بنائیں کہ آپ کا ڈیٹا انٹری ورک فلو ہمیشہ ماخذ زبان پُر کرتا ہے۔ خالی ماخذ فیلڈز کا مطلب خالی ترجمے ہیں۔

مکمل کوریج کے لیے PO فائل ترجمے کے ساتھ ملائیں۔ اپنے کوڈ سٹرنگز اور ڈیٹابیس مواد دونوں کا ترجمہ کریں:

# 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

اس طرح آپ کے صارفین جو بھی سٹرنگ دیکھتے ہیں، چاہے وہ ٹیمپلیٹ سے آئے یا ڈیٹابیس سے، ترجمہ شدہ ہوتی ہے۔

اگلے اقدامات

.po فائلوں کو دستی طور پر ترمیم کرنا بند کریں

TranslateBot، AI کے ساتھ Django ترجمے خودکار بناتا ہے۔ ایک کمانڈ، تمام زبانیں، فی ترجمہ چند پیسے۔