तुम्ही 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 चरणबद्ध सेटअप
चरण १: पॅकेज इन्स्टॉल करा
TranslateBot django-modeltranslation ला पर्यायी डिपेंडन्सी म्हणून बंडल करते. दोन्ही एकाच वेळी इन्स्टॉल करा:
pip install translatebot-django[modeltranslation]
किंवा तुम्ही uv वापरत असाल तर:
uv add --dev translatebot-django[modeltranslation]
चरण २: 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 च्या आधी असणे आवश्यक आहे जेणेकरून ते भाषांतर फील्ड दाखवण्यासाठी अॅडमिन क्लासेस पॅच करू शकेल.
चरण ३: भाषांतरासाठी मॉडेल्स नोंदणी करा
भाषांतरयोग्य मॉडेल्स असलेल्या प्रत्येक अॅपमध्ये 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 सारखे फील्ड नोंदणी करू नका.
चरण ४: मायग्रेशन्स तयार करा आणि चालवा
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 कॉलम रिक्त आहे. जर तुमच्याकडे ३ भाषांतरयोग्य फील्ड आणि ३ लक्ष्य भाषांसह ५०० उत्पादने असतील, तर ते ४,५०० रिक्त फील्ड आहेत जे भरण्याची वाट पाहत आहेत.
ते कंटेंट मॅन्युअली भाषांतर करणे वास्तववादी नाही. व्यावसायिक भाषांतर सेवेसहही, तुम्हाला डेटा एक्स्पोर्ट करणे, पाठवणे, डिलिव्हरीची वाट पाहणे आणि निकाल परत इम्पोर्ट करणे आवश्यक आहे. लहान टीम किंवा एकट्या डेव्हलपरसाठी, याचा सामान्यतः अर्थ असा होतो की हे फीचर कधीच शिप होत नाही.
येथे 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
भाषांतर संदर्भ जोडा (पर्यायी)
AI ला तुमच्या उत्पादन डोमेनबद्दल संदर्भ देण्यासाठी तुमच्या प्रोजेक्ट रूटमध्ये TRANSLATING.md फाइल तयार करा:
# 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 मॉडेल्स एक्सप्लोर करा