Bumalik sa blog

Django Translation para sa mga Solo Developer: Mula Linggo hanggang Minuto

2026-02-11 9 min na pagbabasa
Django Translation para sa mga Solo Developer: Mula Linggo hanggang Minuto

Gumawa ka ng Django app. Gumagana ito, nagsa-sign up ang mga user, at ngayon gusto mong maabot ang mga taong hindi nagsasalita ng Ingles. Malinaw ang problema sa sandaling tingnan mo ito: napakahusay ng internationalization framework ng Django sa pag-extract ng mga translatable string, pero wala talaga itong ginagawa para punan ang mga translation. Nasa iyo na ang bahaging iyon.

Kung isa kang solo developer o dalawang-taong team, ang agwat sa pagitan ng makemessages at isang ganap na naisaling app ay maaaring pakiramdam na napakalaki. Tatalakayin ko ang mga realistic na opsyon, ipapaliwanag kung bakit karamihan sa mga ito ay hindi gumagana para sa maliliit na team, at magpapakita ng workflow na nagpapabago ng translation mula sa isang multi-week na gawain tungo sa isang dalawang-minutong command.

Ang mga Tradisyonal na Opsyon (at Bakit Masakit ang mga Ito)

Opsyon 1: Copy-Paste mula sa Google Translate

Ang pinakakaraniwang unang pagsubok. Binubuksan mo ang iyong .po file, kinokopya ang bawat msgid sa Google Translate, idikit ang resulta bilang msgstr, at ulitin. Para sa bawat string. Sa bawat wika.

Ang isang karaniwang Django app ay may 200-500 translatable string. Kung nagsasalin ka sa limang wika, iyon ay 1,000-2,500 copy-paste cycle. Kahit na ang bawat isa ay tumatagal lamang ng 30 segundo, inaasahan mong 8-20 oras ng nakakabagot na trabaho. At iyon ay bago mo pa ayusin ang mga formatting error, sirang placeholder, at hindi konsistenteng terminolohiya na hindi maiiwasang pumasok.

Mas masama pa, kailangan mong gawin ito ulit sa susunod na sprint kapag nagdagdag ka ng mga bagong string.

Opsyon 2: Mga Propesyonal na Tagasalin

Ang propesyonal na pagsasalin ay karaniwang nagkakahalaga ng $0.10 hanggang $0.25 bawat salita. Ang isang Django app na may 500 string na may average na 8 salita bawat isa ay humigit-kumulang 4,000 salita. Sa $0.15/salita, iyon ay $600 bawat wika, o $3,000 para sa limang wika.

Para sa isang VC-funded startup, iyon ay maliit na halaga lamang. Para sa isang solo developer na nagcha-charge ng $9/buwan bawat user, maaari nitong ubusin ang buong kita mo para sa quarter.

Opsyon 3: Fiverr at mga Freelance Marketplace

Maaari kang makahanap ng mga tagasalin sa Fiverr sa halagang $20-50 bawat wika. Ang ilan ay tunay na mahusay. Marami ang simpleng nagpe-paste ng iyong teksto sa Google Translate at sinisingil ka para sa pribilehiyo. Napupunta ka sa parehong kalidad ng Opsyon 1, dagdag pa ang isang karagdagang round-trip ng komunikasyon at isang linggo ng paghihintay.

Opsyon 4: Crowdin, Transifex, o Weblate

Ang mga platform na ito ay makapangyarihan, pero idinisenyo ang mga ito para sa mga proyektong may dedikadong translation team. Ang setup overhead (pag-sync ng mga repository, pag-configure ng translation memory, pamamahala ng contributor access) ay sobra-sobra kapag ikaw lang ang tao sa proyekto. Ang mga monthly subscription ay nagsisimula sa $30-150/buwan para sa mga bayad na tier, at kahit ang mga libreng tier ay nangangailangan na magmaintain ka pa ng isa pang third-party integration.

Opsyon 5: I-paste ang Lahat sa ChatGPT

Ito ay aktwal na gumagana nang nakakagulat na mabuti para sa kalidad. Ipe-paste mo ang laman ng iyong .po file sa ChatGPT o Claude, humingi ng mga translation, at makakuha ng mga makatuwirang resulta. Ang problema ay hindi ito nag-i-scale. Kailangan mong manu-manong i-extract ang mga hindi pa naisaling string, i-format ang prompt, i-parse ang response pabalik sa .po format, at pangasiwaan ang batching kapag lumampas ka sa mga context limit. Gumagana ito isang beses. Nasisira ito bilang isang mauulit na workflow.

Ang Automation Approach

Paano kung ang buong translation step ay isang command lang? Iyon ang ideya sa likod ng TranslateBot, isang open-source na Django management command na nagbabasa ng iyong mga .po file, nagpapadala ng mga hindi pa naisaling string sa isang AI provider, at isinusulat pabalik ang mga translation sa tamang format.

Narito kung paano ito i-set up.

Hakbang 1: I-install ang TranslateBot

uv add --dev translatebot-django

O gamit ang pip:

pip install translatebot-django

Idagdag ito sa iyong installed apps:

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

Hakbang 2: I-configure ang Iyong AI Provider

Magdagdag ng dalawang setting:

# settings.py
import os

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

Gumagana ang TranslateBot sa OpenAI, Anthropic Claude, Google Gemini, at 100+ iba pang mga modelo sa pamamagitan ng LiteLLM. Sinusuportahan din nito ang DeepL bilang isang dedikadong translation backend.

Hakbang 3: Gumawa ng TRANSLATING.md (Opsyonal pero Inirerekomenda)

Ang isang TRANSLATING.md file sa root ng iyong proyekto ay nagbibigay ng konteksto sa AI tungkol sa iyong application. Ito ang naghihiwalay sa generic na machine translation mula sa mga translation na aktwal na akma sa iyong produkto:

# 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

Ang file na ito ay ipinapadala kasama ng bawat translation request, kaya konsistenteng ginagamit ng AI ang tamang tono at terminolohiya.

Hakbang 4: Magsalin

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

Tatlong command. Iyon lang. Hinahanap ng TranslateBot ang lahat ng hindi pa naisaling string sa lahat ng iyong .po file, isinasalin ang mga ito sa mga batch, at isinusulat pabalik ang mga resulta. Ang mga walang laman na entry lang ang naisasalin bilang default, kaya ang pagpapatakbo ng command ulit pagkatapos magdagdag ng mga bagong string ay nagsasalin lamang ng mga bago.

Ano ang Hitsura Nito sa Praktika

Narito ang isang realistic na sprint workflow para sa isang solo developer na sumusuporta ng limang wika:

Lunes: Gumagawa ka ng bagong feature. Nagdadagdag ka ng ilang bagong translatable string gamit ang gettext() at {% trans %} habang nagtatrabaho ka.

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

Bago mag-commit: Pinapatakbo mo ang tatlong command:

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

Dine-detect ng translate command ang mga bagong hindi pa naisaling entry at isinasalin lamang ang mga iyon. Kung nagdagdag ka ng 5 bagong string at sumusuporta ka ng 5 wika, gumagawa ito ng 25 translation sa isang API call. Ang buong proseso ay tumatagal ng wala pang isang minuto.

Nag-commit ka ng iyong code, template, at mga na-update na .po/.mo file nang magkakasama. Ang mga translation ay bahagi ng iyong normal na development flow, hindi isang hiwalay na proyekto.

I-preview Bago Ka Mag-commit

Kung gusto mong makita ang mga translation bago isulat sa disk, gamitin ang dry-run mode:

python manage.py translate --dry-run

Ini-print nito ang bawat translation sa terminal nang hindi binabago ang anumang file.

Ang Paghahambing ng Gastos

Dito nagiging mahirap pang tutulan ang automation.

Approach 500 string, 5 wika Oras Recurring na gastos
Manual na copy-paste Libre ~40 oras ~8 oras/sprint
Mga propesyonal na tagasalin ~$3,000 1-2 linggo ~$600/sprint
Mga Fiverr tagasalin ~$100-250 3-7 araw ~$50/sprint
Crowdin/Transifex $30-150/buwan Setup: oras Patuloy
TranslateBot + GPT-4o-mini ~$0.05 ~2 minuto ~$0.01/sprint
TranslateBot + DeepL Free $0 ~2 minuto $0

Ang isang maliit-hanggang-katamtamang Django app na may humigit-kumulang 500 translatable string ay karaniwang nagkakahalaga ng wala pang $0.01 bawat wika gamit ang gpt-4o-mini. Para sa karamihan ng mga solo project, ang DeepL free tier (500,000 character/buwan) ay sumasaklaw sa lahat nang walang gastos.

Para maging malinaw: hindi perpekto ang mga AI translation. Hindi rin perpekto ang mga murang human translation. Ang pagkakaiba ay ang mga AI translation ay halos walang gastos, dumarating agad, at maaaring patakbuhin ulit kahit kailan mo gusto.

CI Integration: Huwag Kailanman Mag-ship ng mga Hindi Naisaling String

Isa sa mga pinakakapaki-pakinabang na pattern na natuklasan ko bilang isang solo developer ay ang pagdaragdag ng translation check sa CI. Kasama sa TranslateBot ang isang check_translations command na nabibigo kung may anumang .po file na may hindi naisaling o fuzzy na entry:

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

Kung nagdagdag ka ng bagong {% trans %} tag sa isang template at nakalimutan mong patakbuhin ang translate, mahuhuli ito ng CI:

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

Ginagawa nito ang mga translation mula sa isang bagay na kailangan mong tandaan tungo sa isang bagay na hindi mo makakalimutan.

Mga Praktikal na Tip

Magsimula sa dalawa o tatlong wika. Hindi mo kailangang mag-launch sa 15 wika sa unang araw. Piliin ang mga wika kung saan mayroon kang pinakamaraming user o ang pinakamalaking addressable market. Ang German, French, at Spanish ay sumasaklaw sa malaking bahagi para sa mga European market.

Magkaroon ng mga native speaker na mag-review ng mga kritikal na string. Sapat na ang kalidad ng mga AI translation para sa karamihan ng UI text, pero ang headline ng iyong landing page at ang onboarding flow ay nararapat sa isang mata ng tao. Humingi sa isang kaibigan, isang user, o isang tao sa isang community forum na gumastos ng 10 minuto sa pag-review ng mga pinaka-nakikitang string.

Gamitin ang dry-run bago mag-overwrite. Kung kailangan mong i-translate ulit ang lahat (halimbawa, pagkatapos i-update ang iyong TRANSLATING.md na may mas magandang mga gabay sa terminolohiya), i-preview muna ang mga pagbabago:

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

Itago ang TRANSLATING.md sa version control. Bahagi ito ng translation configuration ng iyong proyekto. Kapag nag-update ka ng terminolohiya o mga gabay sa tono, ang susunod na translate run ay magreflect ng mga pagbabagong iyon para sa anumang bagong string.

Magsalin bawat app kapag kailangan. Kung nagbago ka lamang ng mga string sa isang app, maaari mong i-scope ang translation:

python manage.py translate --app billing

Mula sa mga Linggo Tungo sa mga Minuto

Ang internationalization framework ng Django ay isa sa mga pinakamahusay sa anumang web framework. Ang tooling para sa makemessages, mga locale directory, at compilemessages ay mature at maaasahan. Ang tanging bahagi na nawawala ay ang translation step mismo. Dati iyon ang mahal at mabagal na bahagi.

Sa TranslateBot, ang workflow ay nagiging:

  1. Magsulat ng code gamit ang gettext() at {% trans %} gaya ng normal
  2. Patakbuhin ang makemessages para i-extract ang mga string
  3. Patakbuhin ang translate para punan ang mga translation
  4. Patakbuhin ang compilemessages para i-compile
  5. I-commit ang lahat nang magkakasama

Para sa isang solo developer, ibig sabihin nito na ang localization ay hindi na isang proyektong pinaplano mo para sa "balang araw." Ito ay isang bagay na magagawa mo ngayon, sa oras na kailangan para gumawa ng isang tasa ng kape.

Ang TranslateBot ay open source at available sa PyPI at GitHub. I-install ito, patakbuhin ang command, at makita ang iyong app sa bagong wika sa loob ng ilang minuto.

Itigil ang manu-manong pag-edit ng .po files

Ino-automate ng TranslateBot ang mga pagsasalin ng Django gamit ang AI. Isang command, lahat ng iyong mga wika, sentimo bawat pagsasalin.