Ikiwa umeshafanya kazi na mfumo wa ndani wa Django wa kimataifa (i18n), unajua unashughulikia maneno thabiti vizuri. Kufunga maandishi katika gettext() au kutumia lebo ya kiolezo {% trans %} hutoa maneno kwenye faili za .po, ambazo watafsiri hujaza. Mfumo huu umejaribiwa vitani na unafanya kazi vizuri kwa msimbo na violezo.
Lakini vipi kuhusu maudhui yaliyohifadhiwa kwenye hifadhidata yako?
Majina ya bidhaa, vichwa vya makala, maelezo ya kategoria, majibu ya FAQ, maudhui yaliyotengenezwa na watumiaji. Hakuna kati ya hivi kinachoishi kwenye msimbo wako wa chanzo. Amri ya makemessages ya Django haitaipata kamwe, na faili za .po haziwezi kukusaidia hapa. Ikiwa programu yako inatoa maudhui yanayobadilika kwa watumiaji katika lugha nyingi, unahitaji mkakati tofauti.
Hivi ndivyo unavyofanya: tumia django-modeltranslation kuongeza sehemu zinazoweza kutafsiriwa kwenye modeli zako, kisha otomatisha tafsiri kwa AI kwa kutumia TranslateBot.
Pakiti za Tafsiri ya Hifadhidata ya Django
Pakiti kadhaa za wahusika wengine zinasuluhisha tatizo la tafsiri ya hifadhidata, kila moja ikiwa na muundo tofauti.
django-modeltranslation
Inaongeza safu wima maalum za lugha moja kwa moja kwenye jedwali lako lililopo. Sehemu ya title inakuwa title_en, title_de, title_fr, na kadhalika. Maswali yanabaki haraka kwa sababu kila kitu kiko kwenye jedwali moja. Kiolesura cha msimamizi kinaonyesha lugha zote kando kwa kando.
- Faida: Hakuna JOINs, maswali ya haraka, ufikiaji wa uwazi kupitia vidhibiti vya sehemu, mfumo ikolojia uliokomaa
- Hasara: Mabadiliko ya muundo kwa kila lugha mpya, jedwali pana zaidi
django-parler
Inaunda jedwali tofauti la tafsiri kwa kila modeli. Jedwali la asili linabaki safi, na tafsiri zinahifadhiwa kwenye jedwali linalohusiana lililounganishwa kupitia ufunguo wa kigeni.
- Faida: Muundo safi, rahisi kuongeza lugha bila uhamishaji
- Hasara: Inahitaji JOINs kwa maudhui yaliyotafsiriwa, mifumo ya maswali changamano kidogo
django-translations
Inatumia jedwali moja la tafsiri lenye ufunguo wa kigeni wa jumla unaolenga modeli yoyote. Tafsiri zote za modeli zote zinaingia kwenye jedwali moja.
- Faida: Mabadiliko ya chini ya muundo, inafanya kazi na modeli yoyote
- Hasara: Maswali ya ufunguo wa kigeni wa jumla yanaweza kuwa polepole, API isiyo wazi sana
Sehemu ya JSON ya Mikono
Unaweza kuhifadhi tafsiri katika JSONField:
class Product(models.Model):
name_translations = models.JSONField(default=dict)
# {"en": "Running Shoes", "de": "Laufschuhe", "fr": "Chaussures de course"}
- Faida: Hakuna utegemezi wa ziada, inanyumbulika
- Hasara: Hakuna ushirikiano wa ORM, hakuna msaada wa msimamizi, kila kitu ni cha mikono
Unapaswa Kutumia Ipi?
Kwa miradi mingi, django-modeltranslation ni chaguo bora zaidi. Ni pakiti iliyokomaa zaidi, ina ushirikiano bora zaidi wa msimamizi wa Django, na inaweka data yote kwenye jedwali moja kwa maswali ya haraka. Ubadilishaji (jedwali pana na uhamishaji kwa kila lugha mpya) unaweza kudhibitiwa kwa programu nyingi. Sehemu iliyobaki ya mwongozo huu inatumia django-modeltranslation.
Kuweka django-modeltranslation Hatua kwa Hatua
Hatua ya 1: Sakinisha Pakiti
TranslateBot inajumuisha django-modeltranslation kama utegemezi wa hiari. Sakinisha zote mbili mara moja:
pip install translatebot-django[modeltranslation]
Au ikiwa unatumia uv:
uv add --dev translatebot-django[modeltranslation]
Hatua ya 2: Sanidi Mipangilio ya Django
Mambo mawili ni muhimu katika settings.py: mpangilio wa programu na orodha ya lugha.
# 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'),
]
Programu ya modeltranslation lazima ije kabla ya django.contrib.admin ili iweze kurekebisha madarasa ya msimamizi kuonyesha sehemu za tafsiri.
Hatua ya 3: Sajili Modeli kwa Tafsiri
Unda faili ya translation.py katika kila programu inayohitaji modeli zinazoweza kutafsiriwa. Kwa programu ya duka la biashara ya mtandaoni:
# 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')
Jumuisha sehemu zenye maandishi yanayosomeka na binadamu tu. Usisajili sehemu kama slug, price, au sku.
Hatua ya 4: Unda na Endesha Uhamishaji
python manage.py makemigrations
python manage.py migrate
Baada ya hii, jedwali lako la shop_product lina safu wima mpya:
| Safu wima | Aina |
|---|---|
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 |
Kila lugha uliyoifafanua katika LANGUAGES inapata safu wima yake kwa kila sehemu iliyosajiliwa.
Tatizo: Sehemu Tupu za Tafsiri
Sasa una muundo, lakini kila safu wima ya _de, _fr, na _nl ni tupu. Ikiwa una bidhaa 500 zenye sehemu 3 zinazoweza kutafsiriwa na lugha 3 za lengo, hiyo ni sehemu 4,500 tupu zinazosubiri kujazwa.
Kutafsiri maudhui hayo kwa mikono si kweli. Hata na huduma ya kitaalamu ya tafsiri, ungehitaji kusafirisha data, kuituma, kusubiri usambazaji, na kuingiza matokeo tena. Kwa timu ndogo au msanidi programu mmoja, hii kwa kawaida inamaanisha kipengele hakizinduliwi kamwe.
Hapa ndipo TranslateBot inaingia.
Kuotomatisha Tafsiri na TranslateBot
Amri ya usimamizi ya translate ya TranslateBot inaweza kujaza sehemu zote hizo tupu kwa kutumia AI. Sanidi ufunguo wako wa API kwanza:
# settings.py
TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini" # Fast and cost-effective
Kisha tafsiri modeli zote zilizosajiliwa kwa lugha ya lengo:
python manage.py translate --target-lang de --models
Amri hiyo moja inapata kila modeli iliyosajiliwa na django-modeltranslation, inatambua sehemu ambazo ni tupu kwa lugha ya lengo, na kuzijaza na tafsiri zilizotolewa na AI.
Tafsiri Modeli Maalum
Ikiwa unataka kutafsiri bidhaa tu na si kategoria:
python manage.py translate --target-lang de --models Product
Au modeli kadhaa maalum:
python manage.py translate --target-lang de --models Product Category
Angalia Mapema na Dry Run
Daima angalia mapema kabla ya kuandika kwenye hifadhidata:
python manage.py translate --target-lang de --models --dry-run
Hii inakuonyesha haswa kile kitakachotafsiriwa bila kubadilisha rekodi yoyote.
Tafsiri Tena Maudhui Yaliyopo
Kwa chaguo-msingi, TranslateBot inaruka sehemu ambazo tayari zina tafsiri. Ili kuandika juu ya tafsiri zilizopo (kwa mfano, baada ya kuboresha modeli yako ya AI au kuongeza muktadha):
python manage.py translate --target-lang de --models --overwrite
Tafsiri Lugha Zote Mara Moja
Ikiwa utaacha --target-lang na una LANGUAGES iliyofafanuliwa kwenye mipangilio yako, TranslateBot inatafsiri kwa lugha zote zilizosanidiwa:
python manage.py translate --models
Jinsi Mfumo wa Tafsiri Unavyofanya Kazi
Hivi ndivyo kinavyotokea unapoendesha amri ya kutafsiri.
-
Ugunduzi. TranslateBot inahoji sajili ya django-modeltranslation kupata modeli zote zilizosajiliwa na sehemu zao zinazoweza kutafsiriwa.
-
Ugunduzi wa chanzo. Kwa kila rekodi, inasoma maudhui ya chanzo. Inakagua sehemu ya msingi kwanza (kwa mfano,
name), kisha inarudi kwa sehemu ya kwanza maalum ya lugha iliyojazwa (kwa mfano,name_en). Rekodi zisizo na maudhui ya chanzo zinarukwa. -
Kupanga kwa makundi. Rekodi zinapangwa katika makundi na kutumwa kwa mtoa huduma wa AI. Hii inaweka simu za API kuwa na ufanisi na kuepuka kufikia mipaka ya kiwango.
-
Tafsiri. Kila kundi linatafsiriwa kwa kutumia modeli ya AI iliyosanidiwa. Unaweza kutumia mtoa huduma yeyote wa LLM anayeungwa mkono na LiteLLM (OpenAI, Anthropic, Google, Azure, na wengi wengine) au DeepL.
-
Uandishi wa atomiki. Masasisho yote ya hifadhidata kwa uendeshaji mmoja wa tafsiri yanafungwa katika muamala mmoja. Ikiwa kitu chochote kitaenda vibaya, kama hitilafu ya API au ukiukaji wa vizuizi vya hifadhidata, hakuna data ya sehemu inayohifadhiwa. Yote au hakuna.
Mfano Kamili wa Mtiririko wa Kazi
Hapa kuna mfano kamili kutoka kwa ufafanuzi wa modeli hadi maudhui yaliyotafsiriwa, kwa kutumia modeli ya Product ya biashara ya mtandaoni.
Fafanua Modeli
# 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
Sajili kwa Tafsiri
# shop/translation.py
from modeltranslation.translator import register, TranslationOptions
from .models import Product
@register(Product)
class ProductTranslationOptions(TranslationOptions):
fields = ('name', 'description', 'short_description')
Endesha Uhamishaji
python manage.py makemigrations shop
python manage.py migrate
Ongeza Muktadha wa Tafsiri (Hiari)
Unda faili ya TRANSLATING.md katika mzizi wa mradi wako ili kumpa AI muktadha kuhusu eneo la bidhaa yako:
# 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
Tafsiri
# Preview first
python manage.py translate --target-lang de --models Product --dry-run
# Apply translations
python manage.py translate --target-lang de --models Product
Matokeo:
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
Thibitisha katika Msimamizi
Fungua msimamizi wa Django na uende kwenye bidhaa yoyote. Utaona sehemu za tafsiri zimejazwa:
- Name [de]: Ultraleichte Trail-Laufschuhe
- Description [de]: Diese leichten Trail-Laufschuhe bieten hervorragenden Grip...
- Short description [de]: Leicht, schnell und griffig auf jedem Untergrund.
Rudia kwa kila lugha ya lengo:
python manage.py translate --target-lang fr --models Product
python manage.py translate --target-lang nl --models Product
Au tafsiri lugha zote mara moja:
python manage.py translate --models Product
Mazoea Bora
Hifadhi nakala ya hifadhidata yako kabla ya kuendesha tafsiri nyingi kwenye uzalishaji. TranslateBot inatumia miamala ya atomiki, kwa hivyo uendeshaji ulioshindwa hautaacha data ya sehemu. Lakini kuwa na nakala ya hifadhi kunakupa njia ya kurudi ikiwa ubora wa tafsiri si ulivyotarajia.
# PostgreSQL example
pg_dump mydb > backup_before_translation.sql
Tumia dry run kwanza. Daima endesha na --dry-run kabla ya kutumia tafsiri kwa modeli au lugha mpya. Kagua matokeo ili kuhakikisha maudhui ya chanzo yanagunduliwa kwa usahihi na tafsiri zinaonekana kuwa na maana.
Tafsiri modeli moja kwa wakati kwa hifadhidata kubwa. Hii inafanya iwe rahisi kukagua matokeo na kuendesha tena modeli maalum ikiwa inahitajika.
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
Ongeza muktadha wa tafsiri. Faili ya TRANSLATING.md yenye istilahi maalum za eneo na miongozo ya sauti inaboresha ubora wa tafsiri kwa kiasi kikubwa. Hii ni muhimu sana kwa nyanja maalum kama dawa, sheria, au bidhaa za kiufundi.
Weka lugha yako ya chanzo imejazwa. TranslateBot inasoma kutoka sehemu ya msingi au sehemu ya lugha ya chanzo. Hakikisha mtiririko wako wa kuingiza data daima unajaza lugha ya chanzo. Sehemu tupu za chanzo zinamaanisha tafsiri tupu.
Changanya na tafsiri ya faili za PO kwa ufunikaji kamili. Tafsiri maneno ya msimbo wako na maudhui ya hifadhidata:
# 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
Kwa njia hii kila neno ambalo watumiaji wako wanaona, iwe linatoka kwenye kiolezo au hifadhidata, limetafsiriwa.
Hatua Zifuatazo
- Soma rejea kamili ya amri kwa chaguzi zote zinazopatikana
- Weka ushirikiano wa CI ili kukagua tafsiri zinazokosekana kiotomatiki
- Chunguza modeli za AI zinazoungwa mkono ili kupata usawazishaji bora wa ubora na gharama kwa mradi wako