ब्लॉग पर वापस जाएं

AI से Django डेटाबेस सामग्री का अनुवाद कैसे करें

2026-02-18 9 मिनट पढ़ने का समय
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 अनुवाद को स्वचालित करता है। एक कमांड, सभी भाषाएं, प्रति अनुवाद बेहद कम लागत।