మీరు 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
అనువాద సందర్భం జోడించండి (ఐచ్ఛికం)
మీ ఉత్పత్తి డొమైన్ గురించి 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 మోడల్స్ అన్వేషించండి