బ్లాగ్‌కు తిరిగి వెళ్ళు

Django i18n: .po ఫైల్ అనువాదాన్ని స్వయంచాలకంగా చేయడానికి సంపూర్ణ గైడ్

2026-01-28 8 నిమిషాల చదువు
Django i18n: .po ఫైల్ అనువాదాన్ని స్వయంచాలకంగా చేయడానికి సంపూర్ణ గైడ్

మీరు ఎప్పుడైనా ఒకటి కంటే ఎక్కువ భాషల్లో Django యాప్‌ను షిప్ చేసి ఉంటే, మీకు ఈ ప్రక్రియ తెలుసు. మీరు మీ స్ట్రింగ్‌లను gettext()లో చుట్టి, makemessages రన్ చేసి, వందల ఎంట్రీలతో ఉన్న .po ఫైల్ తెరిచి, లైన్ బై లైన్ అనువాదం మొదలుపెడతారు. రెండు భాషలు మరియు యాభై స్ట్రింగ్‌లకు, ఇది సహించదగినది. ఆరు భాషలు మరియు ఐదు వందల స్ట్రింగ్‌లకు, ఇది మీరు ఎప్పటికీ తిరిగి పొందలేని పూర్తి పని దినం.

ఈ గైడ్ Django యొక్క అంతర్జాతీయీకరణ (i18n) పైప్‌లైన్‌ను మొదటి నుండి చివరి వరకు కవర్ చేస్తుంది, ఎక్కడ విఫలమవుతుందో వివరిస్తుంది, మరియు AI-ఆధారిత అనువాదంతో బాధాకరమైన భాగాన్ని ఎలా ఆటోమేట్ చేయాలో చూపిస్తుంది.

ప్రామాణిక Django i18n వర్క్‌ఫ్లో

Django యొక్క అంతర్నిర్మిత i18n సిస్టమ్ బాగా డిజైన్ చేయబడింది. కోర్ లూప్ ఇలా కనిపిస్తుంది:

స్టెప్ 1: మీ Python కోడ్ మరియు టెంప్లేట్‌లలో అనువాదం కోసం స్ట్రింగ్‌లను గుర్తించండి:

from django.utils.translation import gettext as _

def dashboard(request):
    welcome = _("Welcome back, %(name)s!") % {"name": request.user.first_name}
    return render(request, "dashboard.html", {"welcome": welcome})
{% load i18n %}
<h1>{% trans "Account Settings" %}</h1>
<p>{% blocktrans %}You have {{ count }} unread messages.{% endblocktrans %}</p>

స్టెప్ 2: స్ట్రింగ్‌లను .po ఫైల్‌లలోకి ఎక్స్‌ట్రాక్ట్ చేయండి:

python manage.py makemessages -l de -l fr -l nl

ఇది మీ మొత్తం కోడ్‌బేస్‌ను స్కాన్ చేసి, ప్రతి భాషకు ఒక .po ఫైల్ జనరేట్ చేస్తుంది, ప్రతి అనువదించదగిన స్ట్రింగ్‌ను కలిగి ఉంటుంది:

#: myapp/views.py:4
msgid "Welcome back, %(name)s!"
msgstr ""

#: templates/dashboard.html:2
msgid "Account Settings"
msgstr ""

స్టెప్ 3: ప్రతి ఖాళీ msgstrను చేతితో అనువదించండి.

స్టెప్ 4: పూర్తయిన .po ఫైల్‌లను బైనరీ .mo ఫైల్‌లలోకి కంపైల్ చేయండి:

python manage.py compilemessages

స్టెప్‌లు 1, 2 మరియు 4 వేగవంతమైనవి. స్టెప్ 3 ప్రక్రియ విఫలమయ్యే చోటు.

మాన్యువల్ అనువాదం ఎందుకు స్కేల్ అవ్వదు

ఒక సాధారణ Django అప్లికేషన్‌లో 200 నుండి 2,000 అనువదించదగిన స్ట్రింగ్‌లు ఉంటాయి. దాన్ని లక్ష్య భాషల సంఖ్యతో గుణించండి, మీరు తీవ్రమైన సమయ నిబద్ధతను చూస్తున్నారు.

ఇది సిద్ధాంతపరమైన ఫిర్యాదు కాదు. ఒక ప్రసిద్ధ Django Forum థ్రెడ్‌లో, ఒక డెవలపర్ ప్రతి .po ఫైల్‌కు 8+ గంటలు మాన్యువల్ అనువాదాలకు ఖర్చు చేసినట్లు నివేదించారు. ఒక Django కోర్ కంట్రిబ్యూటర్ కమ్యూనిటీ సమర్పించిన అనువాదాలను ఒకే రిలీజ్‌లో చేర్చడానికి 10 గంటలకు పైగా ఖర్చు చేసినట్లు వివరించారు, ఎక్కువగా రివ్యూ, ఫార్మాటింగ్ దిద్దుబాట్లు మరియు విరిగిన ప్లేస్‌హోల్డర్‌లను సరిదిద్దడంలో.

సమస్యలు కాలక్రమేణా పెరుగుతాయి:

మూల కారణం ఏమిటంటే అనువాదాన్ని ఒక ఇంక్రిమెంటల్, పునరావృత ప్రక్రియ కాకుండా ఒకసారి జరిగే సంఘటనగా పరిగణిస్తారు.

AI తో అనువాదాన్ని ఆటోమేట్ చేయడం

ఆలోచన సూటిగా ఉంది: మానవుడు ప్రతి .po ఫైల్ తెరిచి msgstr విలువలు నింపడానికి బదులుగా, ఒక టూల్ ఫైల్‌ను చదివి, అనువదించని స్ట్రింగ్‌లను AI మోడల్ లేదా అనువాద API కి పంపి, ఫలితాలను తిరిగి రాసి, మిగతా అన్నింటినీ (వ్యాఖ్యలు, ఫైల్ నిర్మాణం, ప్లేస్‌హోల్డర్‌లు, బహువచన రూపాలు) భద్రపరుస్తుంది.

TranslateBot Django సరిగ్గా ఇదే చేసే ఓపెన్-సోర్స్ ప్యాకేజీ. ఇది Django యొక్క మేనేజ్‌మెంట్ కమాండ్ సిస్టమ్‌లో ప్లగ్ అవుతుంది, కాబట్టి మీ ఇప్పటికే ఉన్న వర్క్‌ఫ్లోలో సరిపోతుంది.

దశల వారీ సెటప్

1. ప్యాకేజీని ఇన్‌స్టాల్ చేయండి

pip install translatebot-django

లేదా, మీరు uv (సిఫార్సు చేయబడింది) ఉపయోగిస్తుంటే:

uv add --dev translatebot-django

డెవ్ డిపెండెన్సీగా ఇన్‌స్టాల్ చేయడం ఉద్దేశపూర్వకం. అనువాదాలను జనరేట్ చేసేటప్పుడు మాత్రమే మీకు TranslateBot అవసరం, ప్రొడక్షన్‌లో రన్‌టైమ్‌లో కాదు.

2. INSTALLED_APPS కు జోడించండి

# settings.py
INSTALLED_APPS = [
    # ...
    "translatebot_django",
]

3. మీ AI ప్రొవైడర్‌ను కాన్ఫిగర్ చేయండి

# settings.py
import os

TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"

TranslateBot అంతర్గతంగా LiteLLM ఉపయోగిస్తుంది, అంటే మీరు ఒక స్ట్రింగ్ మార్చడం ద్వారా 100+ మోడల్‌లలో ఏదైనా ఒకదానికి మారవచ్చు:

ప్రొవైడర్ TRANSLATEBOT_MODEL విలువ
OpenAI gpt-4o-mini, gpt-4o
Anthropic claude-sonnet-4-5-20250929
Google gemini/gemini-2.5-flash
Azure OpenAI azure/gpt-4o-mini
DeepL బదులుగా TRANSLATEBOT_PROVIDER = "deepl" ఉపయోగించండి

DeepL కోసం, ఎక్స్‌ట్రా ఇన్‌స్టాల్ చేయండి: pip install translatebot-django[deepl]. DeepL యొక్క ఉచిత టైర్ మీకు నెలకు 500,000 అక్షరాలు ఉచితంగా ఇస్తుంది, ఇది చాలా చిన్న నుండి మధ్యస్థ ప్రాజెక్ట్‌లకు సరిపోతుంది.

4. మీ భాషలను నిర్వచించండి

# settings.py
LANGUAGES = [
    ("en", "English"),
    ("de", "German"),
    ("fr", "French"),
    ("nl", "Dutch"),
    ("ja", "Japanese"),
]

5. అనువాదాన్ని రన్ చేయండి

python manage.py translate

అంతే. TranslateBot మీ ప్రాజెక్ట్‌లో .po ఫైల్‌లను స్కాన్ చేస్తుంది, అనువదించని ఎంట్రీలను గుర్తిస్తుంది, ఆప్టిమైజ్ చేసిన బ్యాచ్‌లలో కాన్ఫిగర్ చేసిన AI మోడల్‌కు పంపుతుంది మరియు ఫలితాలను తిరిగి రాస్తుంది. ఇప్పటికే ఉన్న అనువాదాలు తాకబడవు.

ఒకే భాషను అనువదించడానికి:

python manage.py translate --target-lang nl

అవుట్‌పుట్ ఇలా కనిపిస్తుంది:

Translating to Dutch (nl)...
Found 42 strings to translate
Translating batch 1/2...
Translating batch 2/2...
Successfully translated 42 strings

6. ఎప్పటిలాగే కంపైల్ చేయండి

python manage.py compilemessages

మీ పూర్తి వర్క్‌ఫ్లో ఇప్పుడు:

python manage.py makemessages -l de -l fr -l nl -l ja
python manage.py translate
python manage.py compilemessages

మూడు ఆదేశాలు. ప్రతి భాష. ప్రతి స్ప్రింట్.

డిజైన్ ద్వారా ఇంక్రిమెంటల్

పునరావృత వర్క్‌ఫ్లో కోసం అత్యంత ముఖ్యమైన ఫీచర్ ఇంక్రిమెంటల్ అనువాదం. TranslateBot msgstr ఖాళీగా ఉన్న ఎంట్రీలను మాత్రమే అనువదిస్తుంది. మీ దగ్గర 500 స్ట్రింగ్‌లు ఉండి, ఈ స్ప్రింట్‌లో 15 కొత్తవి అయితే, ఆ 15 మాత్రమే API కి పంపబడతాయి.

ఇది ఆచరణాత్మక కారణాల వల్ల ముఖ్యమైనది:

  1. ఖర్చు. మీరు కొత్త స్ట్రింగ్‌లకు మాత్రమే చెల్లిస్తారు, మొత్తం ఫైల్‌కు కాదు.
  2. వేగం. 15 స్ట్రింగ్‌లను అనువదించడానికి సెకన్లు పడుతుంది, నిమిషాలు కాదు.
  3. స్థిరత్వం. మీరు ఇప్పటికే సమీక్షించి ఆమోదించిన అనువాదాలు ఎప్పటికీ ఓవర్‌రైట్ చేయబడవు (మీరు స్పష్టంగా --overwrite పాస్ చేయకపోతే).

ప్లేస్‌హోల్డర్ భద్రత

Django అనేక ప్లేస్‌హోల్డర్ ఫార్మాట్‌లను ఉపయోగిస్తుంది: %(name)s, %s, %d, {0}, {name}, మరియు ఇన్‌లైన్ HTML ట్యాగ్‌లు <strong> లేదా <a href="..."> వంటివి. వాటిలో ఏదైనా అనువాదంలో పాడైతే, మీకు రన్‌టైమ్ ఎర్రర్‌లు లేదా విరిగిన మార్కప్ వస్తుంది.

TranslateBot AI మోడల్‌కు అన్ని ప్లేస్‌హోల్డర్ ఫార్మాట్‌లను భద్రపరచమని సూచిస్తుంది మరియు అవుట్‌పుట్‌ను ధృవీకరిస్తుంది. ఇలాంటి స్ట్రింగ్:

Welcome to %(site_name)s! You have <strong>%(count)d</strong> new messages.

డచ్‌లో ఇలా అనువదించబడుతుంది:

Welkom bij %(site_name)s! Je hebt <strong>%(count)d</strong> nieuwe berichten.

ప్రతి ప్లేస్‌హోల్డర్ చెక్కుచెదరకుండా ఉంటుంది.

TRANSLATING.md తో నాణ్యత నియంత్రణ

AI మోడల్‌లు సందర్భాన్ని అర్థం చేసుకున్నప్పుడు మెరుగ్గా అనువదిస్తాయి. TranslateBot మీ ప్రాజెక్ట్ రూట్‌లో TRANSLATING.md ఫైల్ కోసం చూస్తుంది మరియు ప్రతి అనువాద అభ్యర్థనలో దాని కంటెంట్‌ను చేర్చుతుంది.

# Translation Context

## About This Project
A B2B project management tool for construction companies.

## Terminology
- "project" means a construction project, not a software project
- "plan" means a building plan/blueprint, not a subscription plan
- Keep "Gantt chart" as-is in all languages

## Tone
- German: use formal "Sie" form (business context)
- French: use formal "vous" form
- Dutch: use informal "je" form

## Do Not Translate
- Brand name: "BuildFlow"
- Feature names: "SmartSchedule", "CostTracker"

ఈ ఫైల్ మీ కోడ్‌తో పాటు వెర్షన్-కంట్రోల్ చేయబడుతుంది, కాబట్టి మీ మొత్తం టీమ్ ఒకే అనువాద సందర్భాన్ని భాగస్వామ్యం చేస్తుంది. ప్రత్యేక పరిభాషతో ఉన్న యాప్‌ల కోసం ప్రతి-యాప్ TRANSLATING.md ఫైల్‌లను కూడా ఉంచవచ్చు.

కమిట్ చేయడానికి ముందు ప్రివ్యూ

--dry-run ఫ్లాగ్ ఏ API కాల్‌లు చేయకుండా లేదా ఫైల్‌లను మార్చకుండా ఏమి అనువదించబడుతుందో సరిగ్గా చూపిస్తుంది:

python manage.py translate --target-lang fr --dry-run
Found 15 untranslated entries
Dry run mode: skipping LLM translation

Would translate 'Welcome to our site'
Would translate 'Hello, %(name)s!'
...

Dry run complete: 15 entries would be translated

పెద్ద అనువాద రన్‌కు ముందు లేదా కొత్త టీమ్ సభ్యుడు API ఖర్చులకు కట్టుబడే ముందు కమాండ్ ఏమి చేస్తుందో అర్థం చేసుకోవాలనుకున్నప్పుడు ఇది ఉపయోగకరం.

CI/CD ఇంటిగ్రేషన్

అమలు లేకుండా అనువాదాలు పాతబడటం తప్పనిసరి. TranslateBot CI పైప్‌లైన్‌ల కోసం రూపొందించిన check_translations మేనేజ్‌మెంట్ కమాండ్‌ను కలిగి ఉంది:

# .github/workflows/ci.yml
jobs:
  translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true
      - run: uv python install
      - run: uv sync --frozen
      - name: Install gettext
        run: sudo apt-get update && sudo apt-get install -y --no-install-recommends gettext
      - name: Check translations
        run: uv run python manage.py check_translations --makemessages

--makemessages ఫ్లాగ్ ముందుగా makemessages -a --no-obsolete రన్ చేస్తుంది, తనిఖీ చేయడానికి ముందు .po ఫైల్‌లు ప్రస్తుత సోర్స్ కోడ్‌ను ప్రతిబింబిస్తాయని నిర్ధారిస్తుంది. ఏవైనా ఎంట్రీలు అనువదించబడకపోతే లేదా అస్పష్టంగా ఉంటే, కమాండ్ కోడ్ 1 తో నిష్క్రమిస్తుంది మరియు బిల్డ్‌ను విఫలం చేస్తుంది:

locale/de/LC_MESSAGES/django.po: 2 untranslated, 0 fuzzy
locale/nl/LC_MESSAGES/django.po: 0 untranslated, 1 fuzzy
CommandError: Translation check failed

సాధారణ డెవలపర్ వర్క్‌ఫ్లో ఇలా అవుతుంది:

  1. ఫీచర్ బ్రాంచ్‌లో కొత్త అనువదించదగిన స్ట్రింగ్‌లను జోడించండి.
  2. ఆ స్ట్రింగ్‌లు అనువదించబడనందున CI విఫలమవుతుంది.
  3. స్థానికంగా python manage.py translate రన్ చేయండి.
  4. అప్‌డేట్ చేసిన .po ఫైల్‌లను కమిట్ చేయండి.
  5. CI పాస్ అవుతుంది.

అనువాదాలు ఎప్పుడూ నిశ్శబ్దంగా సింక్ నుండి బయటపడవు.

డేటాబేస్ కంటెంట్ అనువాదం

మీ అప్లికేషన్ డేటాబేస్‌లో అనువదించదగిన కంటెంట్‌ను నిల్వ చేస్తుంటే (ఉత్పత్తి పేర్లు, బ్లాగ్ పోస్ట్ శీర్షికలు, వర్గం లేబుల్‌లు), TranslateBot django-modeltranslation తో కూడా ఇంటిగ్రేట్ అవుతుంది:

pip install translatebot-django[modeltranslation]
# Translate all registered model fields
python manage.py translate --target-lang de --models

# Translate specific models only
python manage.py translate --target-lang de --models Product Category

అదే ఇంక్రిమెంటల్ లాజిక్ వర్తిస్తుంది: లక్ష్య భాష విలువ ఖాళీగా ఉన్న ఫీల్డ్‌లు మాత్రమే అనువదించబడతాయి.

ఖర్చు పోలిక

అత్యంత సాధారణ ప్రశ్నలలో ఒకటి AI అనువాదం ప్రత్యామ్నాయాలతో పోలిస్తే ఖర్చు-ప్రభావవంతంగా ఉందా అనేది. 5 భాషల్లో 500 అనువదించదగిన స్ట్రింగ్‌లతో ఒక ప్రాజెక్ట్ కోసం స్థూల పోలిక:

విధానం అంచనా ఖర్చు సమయ పెట్టుబడి
మాన్యువల్ (డెవలపర్ సమయం) జేబు నుండి $0, 20-40+ గంటలు చాలా ఎక్కువ
వృత్తిపరమైన అనువాద సేవ $500-2,000+ తక్కువ (కానీ నెమ్మదిగా)
SaaS లోకలైజేషన్ ప్లాట్‌ఫారమ్ $50-200/నెల మధ్యస్థం
TranslateBot + GPT-4o-mini ~$0.05 (ఒకసారి) నిమిషాలు
TranslateBot + DeepL Free $0 (నెలకు 500k అక్షరాల వరకు) నిమిషాలు
TranslateBot + Claude/GPT-4o ~$0.30 (ఒకసారి) నిమిషాలు

స్ట్రింగ్ సంఖ్య మరియు లక్ష్య భాషలపై ఆధారపడి సంఖ్యలు మారతాయి, కానీ పరిమాణ క్రమం తేడా స్థిరంగా ఉంటుంది. కొనసాగుతున్న నిర్వహణ కోసం (ప్రతి స్ప్రింట్‌లో జోడించబడిన 20-50 కొత్త స్ట్రింగ్‌ల అనువాదం), AI ఖర్చు ముఖ్యంగా సున్నా.

ఉత్తమ పద్ధతులు

--dry-run తో ప్రారంభించండి. మీ మొదటి నిజమైన అనువాద రన్‌కు ముందు, ఏమి జరుగుతుందో ప్రివ్యూ చేయండి. ఇది నమ్మకాన్ని పెంచుతుంది మరియు కాన్ఫిగరేషన్ సమస్యలను ముందుగానే గుర్తిస్తుంది.

అనువదించడానికి ముందు .po ఫైల్‌లను కమిట్ చేయండి. ఏదైనా తప్పు జరిగితే, git checkout మిమ్మల్ని వెంటనే శుభ్రమైన స్థితికి తిరిగి తీసుకువస్తుంది.

మొదటి రోజు నుండి TRANSLATING.md రాయండి. మీ ప్రాజెక్ట్ వివరణ మరియు కొన్ని పరిభాష నియమాలతో ఒక సంక్షిప్త ఫైల్ కూడా అనువాద నాణ్యతను కొలవగల విధంగా మెరుగుపరుస్తుంది.

CI కి check_translations జోడించండి. ఈ ఒక్క దశ అత్యంత సాధారణ i18n వైఫల్య విధానాన్ని నిరోధిస్తుంది: అనువాదం కోసం గుర్తించబడిన కానీ వాస్తవంగా ఎప్పుడూ అనువదించబడని స్ట్రింగ్‌లు.

ఖర్చు సామర్థ్యం కోసం gpt-4o-mini లేదా DeepL ఉపయోగించండి. ఖచ్చితత్వం ముఖ్యమైన ప్రాజెక్ట్‌ల కోసం GPT-4o లేదా Claude వంటి ప్రీమియం మోడల్‌లను రిజర్వ్ చేయండి, మార్కెటింగ్ కాపీ, చట్టపరమైన టెక్స్ట్ లేదా డొమైన్-నిర్దిష్ట పరిభాష వంటివి.

క్లిష్టమైన స్ట్రింగ్‌లను సమీక్షించండి. AI అనువాదాలు చాలా UI టెక్స్ట్‌కు తగినంత మంచివి, కానీ చట్టబద్ధంగా బాధ్యతాయుతమైన, భద్రత-క్లిష్టమైన లేదా అధిక-ప్రమాద సందర్భంలో కస్టమర్-ఎదురుగా ఉన్న ఏదైనా దేశీయ భాషావేత్తచే సమీక్షించబడాలి.

గంటల నుండి సెకన్లకు

Django యొక్క i18n ఫ్రేమ్‌వర్క్ అనువాదాలను ఎక్స్‌ట్రాక్ట్ చేయడంలో మరియు కంపైల్ చేయడంలో అద్భుతంగా ఉంటుంది. అంతరం ఎల్లప్పుడూ అనువాద దశలోనే ఉంది -- బహుళ భాషలలో వందల msgstr విలువలను నింపడమనే శ్రమతో కూడిన, తప్పులకు అవకాశం ఉన్న పని.

TranslateBot ఆ అంతరాన్ని తీరుస్తుంది. దీన్ని ఇన్‌స్టాల్ చేయండి, AI ప్రొవైడర్‌కు పాయింట్ చేయండి, ఒక కమాండ్ రన్ చేయండి. కొత్త స్ట్రింగ్‌లు అనువదించబడతాయి. ఇప్పటికే ఉన్న స్ట్రింగ్‌లు తాకబడవు. ప్లేస్‌హోల్డర్‌లు చెక్కుచెదరకుండా ఉంటాయి. CI ఏదైనా తప్పించుకుంటే పట్టుకుంటుంది.

మీ .po ఫైల్‌లు ఒక భారంగా ఉండటం మానేసి బిల్డ్‌లో మరొక భాగంగా మారతాయి.

pip install translatebot-django

translatebot.dev లో ప్రారంభించండి.

.po ఫైళ్ళను మాన్యువల్‌గా సవరించడం ఆపండి

TranslateBot AI తో Django అనువాదాలను స్వయంచాలకంగా చేస్తుంది. ఒక్క కమాండ్‌తో, మీ అన్ని భాషలు, అనువాదానికి చాలా తక్కువ ఖర్చు.