Bloga dön

Solo Geliştiriciler için Django Çevirisi: Haftalardan Dakikalara

2026-02-11 7 dakikalık okuma
Solo Geliştiriciler için Django Çevirisi: Haftalardan Dakikalara

Bir Django uygulaması geliştirdiniz. Çalışıyor, kullanıcılar kayıt oluyor ve artık İngilizce konuşmayan insanlara ulaşmak istiyorsunuz. Sorun baktığınız an belli oluyor: Django'nun uluslararasılaştırma çerçevesi çevrilebilir dizeleri çıkarmada mükemmel, ama çevirileri doldurmak için kesinlikle hiçbir şey yapmıyor. O kısım size kalmış.

Tek başınıza çalışan bir geliştirici veya iki kişilik bir ekipseniz, makemessages ile tamamen çevrilmiş bir uygulama arasındaki boşluk devasa görünebilir. Gerçekçi seçenekleri inceleyeceğim, çoğunun küçük ekipler için neden işe yaramadığını açıklayacağım ve çeviriyi haftalarca süren bir işten iki dakikalık bir komuta dönüştüren bir iş akışı göstereceğim.

Geleneksel Seçenekler (ve Neden Acı Verici)

Seçenek 1: Google Translate'ten Kopyala-Yapıştır

En yaygın ilk deneme. .po dosyanızı açarsınız, her msgid'yi Google Translate'e kopyalarsınız, sonucu msgstr olarak yapıştırırsınız ve tekrarlarsınız. Her dize için. Her dilde.

Tipik bir Django uygulamasında 200-500 çevrilebilir dize bulunur. Beş dile çeviriyorsanız, bu 1.000-2.500 kopyala-yapıştır döngüsü demektir. Her biri yalnızca 30 saniye sürse bile, 8-20 saatlik monoton işe bakıyorsunuz. Ve bu, biçimleme hatalarını, bozuk yer tutucuları ve kaçınılmaz olarak sızan tutarsız terminolojiyi düzeltmeden önceki hali.

Daha da kötüsü, bir sonraki sprint'te yeni dizeler eklediğinizde hepsini tekrar yapmanız gerekiyor.

Seçenek 2: Profesyonel Çevirmenler

Profesyonel çeviri genellikle kelime başına $0,10 ile $0,25 arasındadır. Ortalama 8 kelimelik 500 dizesi olan bir Django uygulaması yaklaşık 4.000 kelime eder. $0,15/kelime ile bu dil başına $600 veya beş dil için $3.000 demektir.

VC destekli bir startup için bu yuvarlama hatası. Kullanıcı başına aylık $9 alan tek başına çalışan bir geliştirici için, çeyreklik gelirin tamamını yiyebilir.

Seçenek 3: Fiverr ve Freelance Pazaryerleri

Fiverr'da dil başına $20-50'ye çevirmen bulabilirsiniz. Bazıları gerçekten yetenekli. Çoğu metninizi Google Translate'e yapıştırıp bunun için sizden para alıyor. Seçenek 1 ile aynı kaliteyi alırsınız, artı ekstra bir iletişim turu ve bir hafta bekleme.

Seçenek 4: Crowdin, Transifex veya Weblate

Bu platformlar güçlü, ancak özel çeviri ekipleri olan projeler için tasarlanmış. Kurulum yükü (depo senkronizasyonu, çeviri belleği yapılandırma, katkıda bulunan erişimini yönetme) projede tek kişi olduğunuzda aşırı. Ücretli katmanlar için aylık abonelikler $30-150/ay'dan başlıyor ve ücretsiz katmanlar bile başka bir üçüncü taraf entegrasyonu sürdürmenizi gerektiriyor.

Seçenek 5: Her Şeyi ChatGPT'ye Yapıştır

Bu aslında kalite açısından şaşırtıcı derecede iyi çalışıyor. .po dosyanızın içeriğini ChatGPT veya Claude'a yapıştırırsınız, çeviri istersiniz ve makul sonuçlar alırsınız. Sorun ölçeklenmemesi. Çevrilmemiş dizeleri manuel olarak çıkarmanız, istemi biçimlendirmeniz, yanıtı .po formatına geri ayrıştırmanız ve bağlam sınırlarını aştığınızda toplu işlemeyi yönetmeniz gerekiyor. Bir kez çalışır. Tekrarlanabilir bir iş akışı olarak çöker.

Otomasyon Yaklaşımı

Ya tüm çeviri adımı tek bir komut olsaydı? TranslateBot'un arkasındaki fikir bu — .po dosyalarınızı okuyan, çevrilmemiş dizeleri bir AI sağlayıcısına gönderen ve çevirileri doğru formatta geri yazan açık kaynaklı bir Django yönetim komutu.

İşte nasıl kurulacağı.

Adım 1: TranslateBot'u Kurun

uv add --dev translatebot-django

Veya pip ile:

pip install translatebot-django

Yüklü uygulamalarınıza ekleyin:

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

Adım 2: AI Sağlayıcınızı Yapılandırın

İki ayar ekleyin:

# settings.py
import os

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

TranslateBot OpenAI, Anthropic Claude, Google Gemini ve LiteLLM aracılığıyla 100'den fazla model ile çalışır. Ayrıca özel bir çeviri arka ucu olarak DeepL'i de destekler.

Adım 3: TRANSLATING.md Oluşturun (İsteğe Bağlı ama Önerilen)

Proje kökünüzdeki bir TRANSLATING.md dosyası AI'ya uygulamanız hakkında bağlam sağlar. Genel makine çevirisini ürününüze gerçekten uyan çevirilerden ayıran budur:

# Translation Context

## About This Project
A personal finance tracker for freelancers. Users track invoices,
expenses, and tax obligations.

## Tone
- Friendly and informal
- Use "du" in German, "tu" in French
- Keep financial terms precise

## Terminology
- "invoice" = "Rechnung" (German), "facture" (French)
- "dashboard" = keep as English loanword in all languages
- "freelancer" = keep as English loanword in German

Bu dosya her çeviri isteğiyle birlikte gönderilir, böylece AI tutarlı bir şekilde doğru ton ve terminolojiyi kullanır.

Adım 4: Çevirin

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

Üç komut. Hepsi bu. TranslateBot tüm .po dosyalarınızdaki tüm çevrilmemiş dizeleri bulur, toplu olarak çevirir ve sonuçları geri yazar. Varsayılan olarak yalnızca boş girişler çevrilir, bu yüzden yeni dizeler ekledikten sonra komutu tekrar çalıştırmak yalnızca yenilerini çevirir.

Pratikte Nasıl Görünüyor

İşte beş dili destekleyen tek başına çalışan bir geliştirici için gerçekçi bir sprint iş akışı:

Pazartesi: Yeni bir özellik geliştiriyorsunuz. Geliştirme sırasında gettext() ve {% trans %} kullanarak birkaç yeni çevrilebilir dize ekliyorsunuz.

from django.utils.translation import gettext_lazy as _

class InvoiceView(View):
    def post(self, request):
        # New string added during development
        messages.success(request, _("Invoice sent successfully."))

Commit'lemeden önce: Üç komut çalıştırıyorsunuz:

python manage.py makemessages -a --no-obsolete
python manage.py translate
python manage.py compilemessages

translate komutu yeni çevrilmemiş girişleri algılar ve yalnızca onları çevirir. 5 yeni dize eklediyseniz ve 5 dili destekliyorsanız, tek bir API çağrısında 25 çeviri yapar. Tüm süreç bir dakikadan az sürer.

Commit'lersiniz kodunuzu, şablonlarınızı ve güncellenmiş .po/.mo dosyalarını birlikte. Çeviriler normal geliştirme akışınızın parçası, ayrı bir proje değil.

Commit'lemeden Önce Önizleme

Çevirileri diske yazılmadan önce görmek istiyorsanız, dry-run modunu kullanın:

python manage.py translate --dry-run

Bu, hiçbir dosyayı değiştirmeden her çeviriyi terminale yazdırır.

Maliyet Karşılaştırması

İşte otomasyona karşı çıkmanın zorlaştığı yer.

Yaklaşım 500 dize, 5 dil Süre Tekrarlayan maliyet
Manuel kopyala-yapıştır Ücretsiz ~40 saat ~8 saat/sprint
Profesyonel çevirmenler ~$3.000 1-2 hafta ~$600/sprint
Fiverr çevirmenleri ~$100-250 3-7 gün ~$50/sprint
Crowdin/Transifex $30-150/ay Kurulum: saatler Sürekli
TranslateBot + GPT-4o-mini ~$0,05 ~2 dakika ~$0,01/sprint
TranslateBot + DeepL Free $0 ~2 dakika $0

Yaklaşık 500 çevrilebilir dizesi olan küçük-orta ölçekli bir Django uygulaması gpt-4o-mini ile genellikle dil başına $0,01'den az maliyete sahiptir. Çoğu solo proje için DeepL'in ücretsiz katmanı (500.000 karakter/ay) her şeyi sıfır maliyetle karşılar.

Açık olalım: AI çevirileri mükemmel değil. Bütçe dostu insan çevirileri de mükemmel değil. Fark şu ki AI çevirileri neredeyse hiçbir şeye mal olmuyor, anında geliyor ve istediğiniz zaman yeniden çalıştırılabiliyor.

CI Entegrasyonu: Asla Çevrilmemiş Dize Göndermeyin

Tek başına çalışan bir geliştirici olarak bulduğum en yararlı kalıplardan biri CI'ya çeviri kontrolü eklemek. TranslateBot, herhangi bir .po dosyasında çevrilmemiş veya bulanık girişler varsa başarısız olan bir check_translations komutu içerir:

# .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

Bir şablona yeni {% trans %} etiketi ekler ve translate çalıştırmayı unutursanız, CI yakalar:

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

Bu, çevirileri yapmayı hatırlamanız gereken bir şeyden unutamayacağınız bir şeye dönüştürür.

Pratik İpuçları

İki veya üç dille başlayın. İlk gün 15 dilde yayına geçmenize gerek yok. En çok kullanıcınız olan veya en büyük ulaşılabilir pazarınız olan dilleri seçin. Almanca, Fransızca ve İspanyolca Avrupa pazarları için geniş bir alanı kapsar.

Kritik dizeleri ana dili konuşanlara inceletin. AI çevirileri çoğu UI metni için yeterince iyi, ama açılış sayfası başlığınız ve başlangıç akışınız insan gözünü hak ediyor. Bir arkadaşınızdan, kullanıcınızdan veya topluluk forumundaki birinden en görünür dizeleri incelemek için 10 dakika ayırmasını isteyin.

Üzerine yazmadan önce dry-run kullanın. Her şeyi yeniden çevirmeniz gerekirse (örneğin, TRANSLATING.md dosyanızı daha iyi terminoloji yönergeleriyle güncelledikten sonra), önce değişiklikleri önizleyin:

python manage.py translate --overwrite --dry-run

TRANSLATING.md'yi sürüm kontrolünde tutun. Projenizin çeviri yapılandırmasının bir parçası. Terminoloji veya ton yönergelerini güncellediğinizde, bir sonraki translate çalıştırması bu değişiklikleri yeni dizeler için yansıtacaktır.

Gerektiğinde uygulama bazında çevirin. Yalnızca bir uygulamadaki dizeleri değiştirdiyseniz, çeviri kapsamını sınırlayabilirsiniz:

python manage.py translate --app billing

Haftalardan Dakikalara

Django'nun uluslararasılaştırma çerçevesi herhangi bir web çerçevesindeki en iyilerden biri. makemessages, yerel ayar dizinleri ve compilemessages araçları olgun ve güvenilir. Eksik olan tek parça çeviri adımının kendisiydi. O, pahalı ve yavaş kısımdı.

TranslateBot ile iş akışı şöyle olur:

  1. gettext() ve {% trans %} ile her zamanki gibi kod yazın
  2. Dizeleri çıkarmak için makemessages çalıştırın
  3. Çevirileri doldurmak için translate çalıştırın
  4. Derlemek için compilemessages çalıştırın
  5. Her şeyi birlikte commit'leyin

Tek başına çalışan bir geliştirici için bu, yerelleştirmenin artık "bir gün" için planladığınız bir proje olmadığı anlamına geliyor. Bugün yapabileceğiniz bir şey, bir fincan kahve hazırlama süresinde.

TranslateBot açık kaynaklıdır ve PyPI ile GitHub'da mevcuttur. Kurun, komutu çalıştırın ve uygulamanızı dakikalar içinde yeni bir dilde görün.

.po dosyalarını manuel düzenlemeyi bırakın

TranslateBot, Django çevirilerini yapay zeka ile otomatikleştirir. Tek komut, tüm dilleriniz, çeviri başına kuruşlar.