กลับไปยังบล็อก

การแปล Django สำหรับนักพัฒนาเดี่ยว: จากสัปดาห์สู่นาที

2026-02-11 อ่าน 4 นาที
การแปล Django สำหรับนักพัฒนาเดี่ยว: จากสัปดาห์สู่นาที

คุณสร้างแอป Django ขึ้นมาแล้ว มันใช้งานได้ ผู้ใช้กำลังสมัครเข้ามา และตอนนี้คุณต้องการเข้าถึงคนที่ไม่ได้พูดภาษาอังกฤษ ปัญหาชัดเจนทันทีที่คุณมอง: เฟรมเวิร์กการทำให้เป็นสากลของ Django ยอดเยี่ยมในการดึงสตริงที่แปลได้ แต่ไม่ได้ทำอะไรเลยในการเติมคำแปล ส่วนนั้นเป็นหน้าที่ของคุณ

หากคุณเป็นนักพัฒนาคนเดียวหรือทีมสองคน ช่องว่างระหว่าง makemessages กับแอปที่แปลเสร็จสมบูรณ์อาจรู้สึกว่ากว้างใหญ่มาก ผมจะพาดูตัวเลือกที่เป็นจริง อธิบายว่าทำไมส่วนใหญ่ถึงไม่เวิร์กสำหรับทีมเล็ก และแสดงเวิร์กโฟลว์ที่เปลี่ยนการแปลจากงานหลายสัปดาห์เป็นคำสั่งสองนาที

ตัวเลือกแบบดั้งเดิม (และทำไมถึงลำบาก)

ตัวเลือกที่ 1: คัดลอก-วางจาก Google Translate

ความพยายามแรกที่พบบ่อยที่สุด คุณเปิดไฟล์ .po คัดลอกแต่ละ msgid ไปยัง Google Translate วางผลลัพธ์กลับเป็น msgstr แล้วทำซ้ำ สำหรับทุกสตริง ในทุกภาษา

แอป Django ทั่วไปมีสตริงที่แปลได้ 200-500 สตริง หากคุณแปลเป็นห้าภาษา นั่นคือ 1,000-2,500 รอบการคัดลอก-วาง แม้แต่ละครั้งใช้เวลาเพียง 30 วินาที คุณก็กำลังมองที่ 8-20 ชั่วโมงของงานน่าเบื่อ และนั่นยังไม่นับการแก้ไขข้อผิดพลาดด้านการจัดรูปแบบ placeholder ที่เสีย และคำศัพท์ที่ไม่สอดคล้องกันที่หลีกเลี่ยงไม่ได้

แย่กว่านั้น คุณต้องทำอีกครั้งในสปรินต์ถัดไปเมื่อเพิ่มสตริงใหม่

ตัวเลือกที่ 2: นักแปลมืออาชีพ

การแปลระดับมืออาชีพมักมีค่าใช้จ่าย $0.10 ถึง $0.25 ต่อคำ แอป Django ที่มี 500 สตริงเฉลี่ย 8 คำต่อสตริงเท่ากับประมาณ 4,000 คำ ที่ $0.15/คำ นั่นคือ $600 ต่อภาษา หรือ $3,000 สำหรับห้าภาษา

สำหรับสตาร์ทอัพที่ได้รับเงินทุน VC นั่นแค่ค่าปัดเศษ สำหรับนักพัฒนาคนเดียวที่เก็บ $9/เดือนต่อผู้ใช้ มันสามารถกินรายได้ทั้งไตรมาสของคุณได้

ตัวเลือกที่ 3: Fiverr และตลาดฟรีแลนซ์

คุณสามารถหานักแปลบน Fiverr ในราคา $20-50 ต่อภาษา บางคนมีทักษะจริงๆ หลายคนแค่วางข้อความของคุณใน Google Translate แล้วเรียกเก็บเงินจากคุณ คุณจบลงด้วยคุณภาพเดียวกับตัวเลือกที่ 1 บวกกับการสื่อสารไป-กลับเพิ่มเติมและการรอหนึ่งสัปดาห์

ตัวเลือกที่ 4: Crowdin, Transifex หรือ Weblate

แพลตฟอร์มเหล่านี้มีประสิทธิภาพ แต่ออกแบบมาสำหรับโปรเจกต์ที่มีทีมแปลเฉพาะ ค่าใช้จ่ายในการตั้งค่า (การซิงค์ที่เก็บข้อมูล การกำหนดค่าหน่วยความจำการแปล การจัดการสิทธิ์ผู้มีส่วนร่วม) มากเกินไปเมื่อคุณเป็นคนเดียวในโปรเจกต์ การสมัครสมาชิกรายเดือนเริ่มต้นที่ $30-150/เดือนสำหรับระดับที่ต้องจ่าย และแม้แต่ระดับฟรีก็ต้องให้คุณดูแลการเชื่อมต่อบุคคลที่สามอีกอัน

ตัวเลือกที่ 5: วางทุกอย่างลงใน ChatGPT

จริงๆ แล้วมันใช้งานได้ดีอย่างน่าประหลาดใจในเรื่องคุณภาพ คุณวางเนื้อหาไฟล์ .po ลงใน ChatGPT หรือ Claude ขอการแปล แล้วได้ผลลัพธ์ที่สมเหตุสมผล ปัญหาคือมันไม่สเกล คุณต้องดึงสตริงที่ยังไม่ได้แปลด้วยตนเอง จัดรูปแบบ prompt แยกวิเคราะห์การตอบกลับกลับเป็นรูปแบบ .po และจัดการ batching เมื่อเกินขีดจำกัด context ใช้ได้ครั้งเดียว พังเมื่อใช้เป็นเวิร์กโฟลว์ที่ทำซ้ำได้

แนวทางอัตโนมัติ

จะเป็นอย่างไรถ้าขั้นตอนการแปลทั้งหมดเป็นคำสั่งเดียว? นั่นคือแนวคิดเบื้องหลัง TranslateBot คำสั่งจัดการ Django แบบโอเพนซอร์สที่อ่านไฟล์ .po ของคุณ ส่งสตริงที่ยังไม่ได้แปลไปยังผู้ให้บริการ AI และเขียนคำแปลกลับในรูปแบบที่ถูกต้อง

นี่คือวิธีตั้งค่า

ขั้นตอนที่ 1: ติดตั้ง TranslateBot

uv add --dev translatebot-django

หรือใช้ pip:

pip install translatebot-django

เพิ่มลงใน installed apps ของคุณ:

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

ขั้นตอนที่ 2: กำหนดค่าผู้ให้บริการ AI ของคุณ

เพิ่มสองการตั้งค่า:

# settings.py
import os

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

TranslateBot ใช้งานได้กับ OpenAI, Anthropic Claude, Google Gemini และโมเดลอื่นอีกกว่า 100 รายการผ่าน LiteLLM นอกจากนี้ยังรองรับ DeepL เป็นแบ็กเอนด์การแปลเฉพาะ

ขั้นตอนที่ 3: สร้าง TRANSLATING.md (ไม่จำเป็นแต่แนะนำ)

ไฟล์ TRANSLATING.md ในรูทโปรเจกต์ของคุณให้บริบทแก่ AI เกี่ยวกับแอปพลิเคชันของคุณ นี่คือสิ่งที่แยกการแปลเครื่องทั่วไปจากการแปลที่เข้ากับผลิตภัณฑ์ของคุณจริงๆ:

# 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

ไฟล์นี้จะถูกส่งไปพร้อมกับทุกคำขอแปล ดังนั้น AI จะใช้โทนและคำศัพท์ที่ถูกต้องอย่างสม่ำเสมอ

ขั้นตอนที่ 4: แปล

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

สามคำสั่ง แค่นั้น TranslateBot ค้นหาสตริงที่ยังไม่ได้แปลทั้งหมดในไฟล์ .po ทุกไฟล์ของคุณ แปลเป็นชุด และเขียนผลลัพธ์กลับ เฉพาะรายการที่ว่างเปล่าเท่านั้นที่จะถูกแปลเป็นค่าเริ่มต้น ดังนั้นการรันคำสั่งอีกครั้งหลังจากเพิ่มสตริงใหม่จะแปลเฉพาะสตริงใหม่เท่านั้น

หน้าตาในทางปฏิบัติเป็นอย่างไร

นี่คือเวิร์กโฟลว์สปรินต์ที่เป็นจริงสำหรับนักพัฒนาคนเดียวที่รองรับห้าภาษา:

วันจันทร์: คุณสร้างฟีเจอร์ใหม่ คุณเพิ่มสตริงที่แปลได้ใหม่สองสามตัวโดยใช้ gettext() และ {% trans %} ระหว่างทำงาน

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: คุณรันสามคำสั่ง:

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

คำสั่ง translate ตรวจจับรายการใหม่ที่ยังไม่ได้แปลและแปลเฉพาะรายการเหล่านั้น หากคุณเพิ่ม 5 สตริงใหม่และรองรับ 5 ภาษา มันจะสร้าง 25 การแปลในการเรียก API ครั้งเดียว กระบวนการทั้งหมดใช้เวลาไม่ถึงหนึ่งนาที

คุณ commit โค้ด เทมเพลต และไฟล์ .po/.mo ที่อัปเดตแล้วพร้อมกัน การแปลเป็นส่วนหนึ่งของขั้นตอนการพัฒนาปกติของคุณ ไม่ใช่โปรเจกต์แยกต่างหาก

ดูตัวอย่างก่อน commit

หากคุณต้องการดูการแปลก่อนที่จะเขียนลงดิสก์ ให้ใช้โหมด dry-run:

python manage.py translate --dry-run

คำสั่งนี้จะพิมพ์ทุกการแปลลงในเทอร์มินัลโดยไม่แก้ไขไฟล์ใดๆ

การเปรียบเทียบต้นทุน

ตรงนี้คือจุดที่การอัตโนมัติยากจะโต้แย้ง

แนวทาง 500 สตริง, 5 ภาษา เวลา ต้นทุนที่เกิดซ้ำ
คัดลอก-วางด้วยมือ ฟรี ~40 ชั่วโมง ~8 ชม./สปรินต์
นักแปลมืออาชีพ ~$3,000 1-2 สัปดาห์ ~$600/สปรินต์
นักแปล Fiverr ~$100-250 3-7 วัน ~$50/สปรินต์
Crowdin/Transifex $30-150/เดือน ตั้งค่า: หลายชั่วโมง ต่อเนื่อง
TranslateBot + GPT-4o-mini ~$0.05 ~2 นาที ~$0.01/สปรินต์
TranslateBot + DeepL Free $0 ~2 นาที $0

แอป Django ขนาดเล็กถึงกลางที่มีสตริงที่แปลได้ประมาณ 500 สตริงมักจะมีค่าใช้จ่ายต่ำกว่า $0.01 ต่อภาษาเมื่อใช้ gpt-4o-mini สำหรับโปรเจกต์เดี่ยวส่วนใหญ่ ระดับฟรีของ DeepL (500,000 ตัวอักษร/เดือน) ครอบคลุมทุกอย่างโดยไม่มีค่าใช้จ่าย

พูดให้ชัด: การแปลด้วย AI ไม่สมบูรณ์แบบ การแปลโดยมนุษย์ราคาถูกก็เช่นกัน ความแตกต่างคือการแปลด้วย AI แทบไม่มีค่าใช้จ่าย มาถึงทันที และสามารถรันใหม่ได้เมื่อไหร่ก็ได้ที่ต้องการ

การรวม CI: อย่าส่งสตริงที่ยังไม่ได้แปลเด็ดขาด

หนึ่งในรูปแบบที่มีประโยชน์ที่สุดที่ผมพบในฐานะนักพัฒนาคนเดียวคือการเพิ่มการตรวจสอบการแปลใน CI TranslateBot มีคำสั่ง check_translations ที่จะล้มเหลวถ้าไฟล์ .po ใดๆ มีรายการที่ยังไม่ได้แปลหรือ fuzzy:

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

หากคุณเพิ่มแท็ก {% trans %} ใหม่ในเทมเพลตและลืมรัน translate 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

สิ่งนี้เปลี่ยนการแปลจากสิ่งที่คุณต้องจำทำเป็นสิ่งที่คุณลืมไม่ได้

เคล็ดลับที่ใช้ได้จริง

เริ่มต้นด้วยสองหรือสามภาษา คุณไม่จำเป็นต้องเปิดตัวใน 15 ภาษาตั้งแต่วันแรก เลือกภาษาที่คุณมีผู้ใช้มากที่สุดหรือตลาดที่เข้าถึงได้มากที่สุด ภาษาเยอรมัน ฝรั่งเศส และสเปนครอบคลุมพื้นที่กว้างสำหรับตลาดยุโรป

ให้เจ้าของภาษาตรวจสอบสตริงที่สำคัญ การแปลด้วย AI ดีพอสำหรับข้อความ UI ส่วนใหญ่ แต่หัวเรื่องหน้า landing page และขั้นตอน onboarding ของคุณสมควรได้รับการตรวจสอบจากคน ขอให้เพื่อน ผู้ใช้ หรือใครสักคนในฟอรัมชุมชนใช้เวลา 10 นาทีตรวจสอบสตริงที่เห็นได้ชัดที่สุด

ใช้ dry-run ก่อนเขียนทับ หากคุณต้องแปลทุกอย่างใหม่ (เช่น หลังจากอัปเดต TRANSLATING.md ด้วยแนวทางคำศัพท์ที่ดีกว่า) ให้ดูตัวอย่างการเปลี่ยนแปลงก่อน:

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

เก็บ TRANSLATING.md ใน version control มันเป็นส่วนหนึ่งของการกำหนดค่าการแปลของโปรเจกต์ เมื่อคุณอัปเดตคำศัพท์หรือแนวทางโทน การรัน translate ครั้งถัดไปจะสะท้อนการเปลี่ยนแปลงเหล่านั้นสำหรับสตริงใหม่ทุกตัว

แปลแต่ละแอปเมื่อจำเป็น หากคุณเปลี่ยนสตริงในแอปเดียวเท่านั้น คุณสามารถกำหนดขอบเขตการแปลได้:

python manage.py translate --app billing

จากหลายสัปดาห์เป็นหลายนาที

เฟรมเวิร์กการทำให้เป็นสากลของ Django เป็นหนึ่งในเฟรมเวิร์กที่ดีที่สุดในเว็บเฟรมเวิร์กใดๆ เครื่องมือสำหรับ makemessages ไดเรกทอรี locale และ compilemessages มีความสมบูรณ์และเชื่อถือได้ ส่วนเดียวที่ขาดหายไปคือขั้นตอนการแปลเอง นั่นเคยเป็นส่วนที่แพงและช้า

ด้วย TranslateBot เวิร์กโฟลว์จะกลายเป็น:

  1. เขียนโค้ดด้วย gettext() และ {% trans %} ตามปกติ
  2. รัน makemessages เพื่อดึงสตริง
  3. รัน translate เพื่อเติมคำแปล
  4. รัน compilemessages เพื่อคอมไพล์
  5. commit ทุกอย่างพร้อมกัน

สำหรับนักพัฒนาคนเดียว นี่หมายความว่าการทำให้เป็นภาษาท้องถิ่นไม่ใช่โปรเจกต์ที่คุณวางแผนไว้สำหรับ "สักวันหนึ่ง" อีกต่อไป มันเป็นสิ่งที่คุณสามารถทำได้วันนี้ ในเวลาที่ใช้ชงกาแฟสักแก้ว

TranslateBot เป็นโอเพนซอร์สและมีให้บน PyPI และ GitHub ติดตั้ง รันคำสั่ง แล้วดูแอปของคุณในภาษาใหม่ภายในไม่กี่นาที

หยุดแก้ไขไฟล์ .po ด้วยตนเอง

TranslateBot ช่วยแปลภาษา Django อัตโนมัติด้วย AI เพียงคำสั่งเดียว ครอบคลุมทุกภาษา ค่าใช้จ่ายน้อยมาก