اگر آپ نے Django کے بلٹ ان بین الاقوامیت (i18n) فریم ورک کے ساتھ کام کیا ہے، تو آپ جانتے ہیں کہ یہ جامد سٹرنگز کو اچھی طرح سنبھالتا ہے۔ ٹیکسٹ کو gettext() میں لپیٹنا یا {% trans %} ٹیمپلیٹ ٹیگ استعمال کرنا سٹرنگز کو .po فائلوں میں نکالتا ہے، جنہیں مترجمین پُر کرتے ہیں۔ یہ سسٹم جنگ میں آزمودہ ہے اور کوڈ اور ٹیمپلیٹس کے لیے بہترین کام کرتا ہے۔
لیکن آپ کے ڈیٹابیس میں محفوظ مواد کا کیا ہوگا؟
پروڈکٹ کے نام، مضامین کے عنوانات، زمرے کی تفصیلات، FAQ کے جوابات، صارف کا تخلیق کردہ مواد۔ اس میں سے کچھ بھی آپ کے سورس کوڈ میں نہیں ہے۔ Django کا makemessages کمانڈ اسے کبھی نہیں ڈھونڈ پائے گا، اور .po فائلیں یہاں آپ کی مدد نہیں کر سکتیں۔ اگر آپ کی ایپلیکیشن متعدد زبانوں میں صارفین کو متحرک مواد فراہم کرتی ہے، تو آپ کو ایک مختلف حکمت عملی کی ضرورت ہے۔
یہاں طریقہ ہے: اپنے ماڈلز میں قابل ترجمہ فیلڈز شامل کرنے کے لیے django-modeltranslation استعمال کریں، پھر TranslateBot کا استعمال کرتے ہوئے AI سے ترجمہ خودکار کریں۔
Django ڈیٹابیس ترجمہ پیکجز
کئی فریق ثالث پیکجز ڈیٹابیس ترجمے کا مسئلہ حل کرتے ہیں، ہر ایک مختلف فن تعمیر کے ساتھ۔
django-modeltranslation
آپ کی موجودہ ٹیبلز میں براہ راست زبان مخصوص کالم شامل کرتا ہے۔ ایک title فیلڈ title_en، title_de، title_fr وغیرہ بن جاتا ہے۔ کیونکہ سب کچھ ایک ہی ٹیبل میں ہوتا ہے اس لیے کوئیریز تیز رہتی ہیں۔ ایڈمن انٹرفیس تمام زبانیں ایک ساتھ دکھاتا ہے۔
- فوائد: کوئی JOINs نہیں، تیز کوئیریز، فیلڈ ڈسکرپٹرز کے ذریعے شفاف رسائی، پختہ ایکو سسٹم
- نقصانات: ہر نئی زبان کے لیے سکیما میں تبدیلیاں، چوڑی ٹیبلز
django-parler
ہر ماڈل کے لیے ایک علیحدہ ترجمہ ٹیبل بناتا ہے۔ اصل ٹیبل صاف رہتی ہے، اور ترجمے فارن کی کے ذریعے جڑی ہوئی متعلقہ ٹیبل میں محفوظ ہوتے ہیں۔
- فوائد: صاف سکیما، مائیگریشنز کے بغیر زبانیں شامل کرنا آسان
- نقصانات: ترجمہ شدہ مواد کے لیے JOINs درکار، قدرے زیادہ پیچیدہ کوئیری پیٹرنز
django-translations
کسی بھی ماڈل کی طرف اشارہ کرنے والی جنرک فارن کی کے ساتھ ایک واحد ترجمہ ٹیبل استعمال کرتا ہے۔ تمام ماڈلز کے تمام ترجمے ایک ٹیبل میں جاتے ہیں۔
- فوائد: سکیما میں کم سے کم تبدیلیاں، کسی بھی ماڈل کے ساتھ کام کرتا ہے
- نقصانات: جنرک فارن کی کوئیریز سست ہو سکتی ہیں، کم شفاف API
دستی JSON فیلڈ
آپ ترجمے JSONField میں محفوظ کر سکتے ہیں:
class Product(models.Model):
name_translations = models.JSONField(default=dict)
# {"en": "Running Shoes", "de": "Laufschuhe", "fr": "Chaussures de course"}
- فوائد: کوئی اضافی انحصار نہیں، لچکدار
- نقصانات: کوئی ORM انضمام نہیں، کوئی ایڈمن سپورٹ نہیں، سب کچھ دستی
آپ کو کون سا استعمال کرنا چاہیے؟
زیادہ تر پروجیکٹس کے لیے، 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
ترجمہ پائپ لائن کیسے کام کرتی ہے
ترجمہ کمانڈ چلانے پر یہ ہوتا ہے۔
-
دریافت۔ TranslateBot تمام رجسٹرڈ ماڈلز اور ان کے قابل ترجمہ فیلڈز تلاش کرنے کے لیے django-modeltranslation کی رجسٹری سے استفسار کرتا ہے۔
-
ماخذ کا پتہ لگانا۔ ہر ریکارڈ کے لیے، یہ ماخذ مواد پڑھتا ہے۔ یہ پہلے بنیادی فیلڈ (مثلاً
name) چیک کرتا ہے، پھر پہلے بھرے ہوئے زبان مخصوص فیلڈ (مثلاًname_en) پر واپس آتا ہے۔ بغیر ماخذ مواد کے ریکارڈز چھوڑ دیے جاتے ہیں۔ -
بیچنگ۔ ریکارڈز بیچوں میں گروپ کیے جاتے ہیں اور AI فراہم کنندہ کو بھیجے جاتے ہیں۔ یہ API کالز کو مؤثر رکھتا ہے اور شرح کی حدود سے ٹکرانے سے بچاتا ہے۔
-
ترجمہ۔ ہر بیچ کا ترتیب شدہ AI ماڈل استعمال کرکے ترجمہ کیا جاتا ہے۔ آپ LiteLLM کی سپورٹ کردہ کوئی بھی LLM فراہم کنندہ (OpenAI، Anthropic، Google، Azure، اور بہت سے دیگر) یا DeepL استعمال کر سکتے ہیں۔
-
ایٹامک رائٹس۔ ایک ترجمہ رن کی تمام ڈیٹابیس اپ ڈیٹس ایک واحد ٹرانزیکشن میں لپیٹی جاتی ہیں۔ اگر کچھ غلط ہو جائے، جیسے 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 ایڈمن کھولیں اور کسی بھی پروڈکٹ پر جائیں۔ آپ ترجمہ فیلڈز بھری ہوئی دیکھیں گے:
- Name [de]: Ultraleichte Trail-Laufschuhe
- Description [de]: Diese leichten Trail-Laufschuhe bieten hervorragenden Grip...
- Short description [de]: Leicht, schnell und griffig auf jedem Untergrund.
ہر ہدف زبان کے لیے دہرائیں:
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
اس طرح آپ کے صارفین جو بھی سٹرنگ دیکھتے ہیں، چاہے وہ ٹیمپلیٹ سے آئے یا ڈیٹابیس سے، ترجمہ شدہ ہوتی ہے۔
اگلے اقدامات
- تمام دستیاب اختیارات کے لیے مکمل کمانڈ حوالہ پڑھیں
- گم شدہ ترجموں کی خودکار جانچ کے لیے CI انضمام سیٹ اپ کریں
- اپنے پروجیکٹ کے لیے معیار اور لاگت کا بہترین توازن تلاش کرنے کے لیے سپورٹ شدہ AI ماڈلز دریافت کریں