Powrót do bloga

Tłumaczenie Django dla samodzielnych deweloperów: od tygodni do minut

2026-02-11 7 min czytania
Tłumaczenie Django dla samodzielnych deweloperów: od tygodni do minut

Zbudowales aplikacje Django. Dziala, uzytkownicy sie rejestruja i teraz chcesz dotrzec do ludzi, ktorzy nie mowia po angielsku. Problem jest oczywisty w momencie, gdy na niego spojrzysz: framework internacjonalizacji Django jest doskonaly w wyciaganiu tlumaczalnych stringow, ale nie robi absolutnie nic, zeby wypelnic tlumaczenia. Ta czesc lezy po twojej stronie.

Jesli jestes samodzielnym deweloperem lub dwuosobowym zespolem, przepasc miedzy makemessages a w pelni przetlumaczona aplikacja moze wydawac sie ogromna. Przedstawie realistyczne opcje, wyjasnie dlaczego wiekszosc z nich nie sprawdza sie w malych zespolach i pokaze workflow, ktory zamienia tlumaczenie z kilkutygodniowego zadania w dwuminutowa komende.

Tradycyjne opcje (i dlaczego bola)

Opcja 1: Kopiuj-wklej z Google Translate

Najczestsza pierwsza proba. Otwierasz plik .po, kopiujesz kazdy msgid do Google Translate, wklejasz wynik jako msgstr i powtarzasz. Dla kazdego stringa. W kazdym jezyku.

Typowa aplikacja Django ma 200-500 tlumaczalnych stringow. Jesli tlumaczysz na piec jezykow, to 1000-2500 cykli kopiuj-wklej. Nawet jesli kazdy zajmuje tylko 30 sekund, patrzysz na 8-20 godzin bezmyslnej pracy. I to zanim naprawisz bledy formatowania, uszkodzone placeholdery i niespojne terminologie, ktore nieuchronnie sie wkradaja.

Co gorsza, musisz to zrobic ponownie w nastepnym sprincie, gdy dodasz nowe stringi.

Opcja 2: Profesjonalni tlumacze

Profesjonalne tlumaczenie kosztuje zazwyczaj od $0.10 do $0.25 za slowo. Aplikacja Django z 500 stringami o sredniej 8 slow kazdego daje okolo 4000 slow. Przy $0.15/slowo to $600 za jezyk, czyli $3000 za piec jezykow.

Dla startupu finansowanego przez VC to blad zaokraglenia. Dla samodzielnego dewelopera pobierajacego $9/miesiac od uzytkownika, moze pochlanac caly przychod za kwartal.

Opcja 3: Fiverr i platformy freelancerskie

Mozesz znalezc tlumaczy na Fiverr za $20-50 za jezyk. Niektorzy sa naprawde utalentowani. Wielu po prostu wkleja twoj tekst do Google Translate i pobiera od ciebie oplate za ten przywilej. Konczysz z taka sama jakoscia jak w Opcji 1, plus dodatkowa runda komunikacji i tydzien czekania.

Opcja 4: Crowdin, Transifex lub Weblate

Te platformy sa potezne, ale zaprojektowane dla projektow z dedykowanymi zespolami tlumaczy. Koszt konfiguracji (synchronizacja repozytoriow, konfiguracja pamieci tlumaczeń, zarzadzanie dostepem wspolpracownikow) jest przesada, gdy jestes jedyna osoba w projekcie. Miesieczne subskrypcje zaczynaja sie od $30-150/miesiac za platne plany, a nawet darmowe plany wymagaja utrzymywania kolejnej integracji z podmiotem trzecim.

Opcja 5: Wklej wszystko do ChatGPT

To faktycznie dziala zaskakujaco dobrze pod wzgledem jakosci. Wklejasz zawartosc pliku .po do ChatGPT lub Claude, prosisz o tlumaczenia i dostajesz rozsadne wyniki. Problem polega na tym, ze nie skaluje sie. Musisz recznie wyodrebnic nieprzetlumaczone stringi, sformatowac prompt, sparsowac odpowiedz z powrotem do formatu .po i obslugiwac batchowanie, gdy przekraczasz limity kontekstu. Dziala raz. Rozpada sie jako powtarzalny workflow.

Podejscie automatyzacyjne

A gdyby caly krok tlumaczenia byl jedna komenda? To idea stojaca za TranslateBot, open-source'owa komenda zarzadzania Django, ktora czyta twoje pliki .po, wysyla nieprzetlumaczone stringi do dostawcy AI i zapisuje tlumaczenia z powrotem w prawidlowym formacie.

Oto jak to skonfigurowac.

Krok 1: Zainstaluj TranslateBot

uv add --dev translatebot-django

Lub z pip:

pip install translatebot-django

Dodaj do zainstalowanych aplikacji:

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

Krok 2: Skonfiguruj dostawce AI

Dodaj dwa ustawienia:

# settings.py
import os

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

TranslateBot dziala z OpenAI, Anthropic Claude, Google Gemini i ponad 100 innymi modelami przez LiteLLM. Obsluguje rowniez DeepL jako dedykowany backend tlumaczeniowy.

Krok 3: Utworz TRANSLATING.md (opcjonalne, ale zalecane)

Plik TRANSLATING.md w katalogu glownym projektu daje AI kontekst o twojej aplikacji. To wlasnie odroznia generyczne tlumaczenie maszynowe od tlumaczen, ktore naprawde pasuja do twojego produktu:

# 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

Ten plik jest wysylany wraz z kazdym zapytaniem o tlumaczenie, wiec AI konsekwentnie uzywa odpowiedniego tonu i terminologii.

Krok 4: Przetlumacz

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

Trzy komendy. To wszystko. TranslateBot znajduje wszystkie nieprzetlumaczone stringi we wszystkich twoich plikach .po, tlumaczy je w partiach i zapisuje wyniki z powrotem. Domyslnie tlumaczone sa tylko puste wpisy, wiec ponowne uruchomienie komendy po dodaniu nowych stringow tlumaczy tylko te nowe.

Jak to wyglada w praktyce

Oto realistyczny workflow sprintowy dla samodzielnego dewelopera obslugujacego piec jezykow:

Poniedzialek: Budujesz nowa funkcjonalnosc. Dodajesz kilka nowych tlumaczalnych stringow uzywajac gettext() i {% trans %} w trakcie pracy.

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."))

Przed commitem: Uruchamiasz trzy komendy:

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

Komenda translate wykrywa nowe nieprzetlumaczone wpisy i tlumaczy tylko te. Jesli dodales 5 nowych stringow i obslugjesz 5 jezykow, wykonuje 25 tlumaczen w jednym wywolaniu API. Caly proces trwa mniej niz minute.

Commitujesz kod, szablony i zaktualizowane pliki .po/.mo razem. Tlumaczenia sa czescia normalnego procesu rozwoju, a nie oddzielnym projektem.

Podglad przed commitem

Jesli chcesz zobaczyc tlumaczenia zanim zostana zapisane na dysku, uzyj trybu dry-run:

python manage.py translate --dry-run

To wyswietla kazde tlumaczenie w terminalu bez modyfikowania jakichkolwiek plikow.

Porownanie kosztow

Tu wlasnie automatyzacja staje sie trudna do podwazenia.

Podejscie 500 stringow, 5 jezykow Czas Koszt cykliczny
Reczne kopiuj-wklej Za darmo ~40 godzin ~8 godz./sprint
Profesjonalni tlumacze ~$3000 1-2 tygodnie ~$600/sprint
Tlumacze z Fiverr ~$100-250 3-7 dni ~$50/sprint
Crowdin/Transifex $30-150/mies. Konfiguracja: godziny Ciagle
TranslateBot + GPT-4o-mini ~$0.05 ~2 minuty ~$0.01/sprint
TranslateBot + DeepL Free $0 ~2 minuty $0

Mala do sredniej aplikacja Django z okolo 500 tlumaczalnymi stringami kosztuje zazwyczaj mniej niz $0.01 za jezyk z gpt-4o-mini. Dla wiekszosci projektow jednoosobowych darmowy plan DeepL (500 000 znakow/miesiac) pokrywa wszystko bez zadnych kosztow.

Zeby bylo jasne: tlumaczenia AI nie sa idealne. Tanie tlumaczenia ludzkie tez nie. Roznica polega na tym, ze tlumaczenia AI nie kosztuja prawie nic, przychodza natychmiast i mozna je ponownie uruchomic kiedy chcesz.

Integracja CI: Nigdy nie wysylaj nieprzetlumaczonych stringow

Jeden z najbardziej uzytecznych wzorcow, ktore znalazlem jako samodzielny deweloper, to dodanie sprawdzenia tlumaczen do CI. TranslateBot zawiera komende check_translations, ktora konczy sie bledem, jesli jakikolwiek plik .po ma nieprzetlumaczone lub rozmyte wpisy:

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

Jesli dodasz nowy tag {% trans %} w szablonie i zapomnisz uruchomic translate, CI to wylapie:

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

To zamienia tlumaczenia z czegos, co musisz pamietac, w cos, czego nie mozesz zapomniec.

Praktyczne wskazowki

Zacznij od dwoch lub trzech jezykow. Nie musisz startowac w 15 jezykach pierwszego dnia. Wybierz te, gdzie masz najwiecej uzytkownikow lub najwiekszy rynek docelowy. Niemiecki, francuski i hiszpanski pokrywaja duza czesc rynkow europejskich.

Poproś native speakerow o przeglad krytycznych stringow. Tlumaczenia AI sa wystarczajaco dobre dla wiekszosci tekstu UI, ale naglowek strony glownej i proces onboardingu zasluguja na ludzkie oko. Popros znajomego, uzytkownika lub kogos na forum spolecznosci o poswiecenie 10 minut na przeglad najbardziej widocznych stringow.

Uzyj dry-run przed nadpisaniem. Jesli kiedykolwiek musisz ponownie przetlumaczyc wszystko (na przyklad po zaktualizowaniu TRANSLATING.md z lepszymi wytycznymi terminologicznymi), najpierw zobacz podglad zmian:

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

Trzymaj TRANSLATING.md w kontroli wersji. To czesc konfiguracji tlumaczen twojego projektu. Gdy zaktualizujesz terminologie lub wytyczne dotyczace tonu, nastepne uruchomienie translate odzwierciedli te zmiany dla nowych stringow.

Tlumacz per aplikacja, gdy to potrzebne. Jesli zmieniles stringi tylko w jednej aplikacji, mozesz ograniczyc zakres tlumaczenia:

python manage.py translate --app billing

Od tygodni do minut

Framework internacjonalizacji Django jest jednym z najlepszych w kazdym frameworku webowym. Narzedzia do makemessages, katalogow locale i compilemessages sa dojrzale i niezawodne. Jedynym brakujacym elementem byl sam krok tlumaczenia. To byl dotychczas drogi i wolny element.

Z TranslateBot workflow staje sie:

  1. Pisz kod z gettext() i {% trans %} jak normalnie
  2. Uruchom makemessages, zeby wyodrebnic stringi
  3. Uruchom translate, zeby wypelnic tlumaczenia
  4. Uruchom compilemessages, zeby skompilowac
  5. Commituj wszystko razem

Dla samodzielnego dewelopera oznacza to, ze lokalizacja nie jest juz projektem, ktory planujesz na "kiedys". To cos, co mozesz zrobic dzisiaj, w czasie potrzebnym na zrobienie filizanki kawy.

TranslateBot jest open source i dostepny na PyPI i GitHub. Zainstaluj go, uruchom komende i zobacz swoja aplikacje w nowym jezyku w kilka minut.

Przestań ręcznie edytować pliki .po

TranslateBot automatyzuje tłumaczenia Django za pomocą AI. Jedno polecenie, wszystkie języki, grosze za tłumaczenie.