Bunchee Online Docs

เครื่องมือแปลภาษา (Translation Tools)

ระบบแปลภาษาของ Frappe และแอป translation_tools สำหรับจัดการการแปลภาษา ASEAN อัตโนมัติ

ระบบแปลภาษาของ Frappe

Frappe Framework มีระบบแปลภาษาที่ใช้ไฟล์ PO/MO ตามมาตรฐาน GNU gettext ระบบนี้ประกอบด้วย 4 คำสั่งหลักที่ทำงานร่วมกันเป็น pipeline

เอกสารอ้างอิงต้นฉบับจาก Frappe Framework ขอบคุณทีม Frappe ที่พัฒนาระบบแปลภาษาที่ยอดเยี่ยมนี้


1. สร้างไฟล์ POT Template

bench generate-pot-file [OPTIONS]

ดึงข้อความที่สามารถแปลได้ทั้งหมดจากแอปและสร้างไฟล์ POT (Portable Object Template) ที่ [app_module]/locale/main.pot

ตัวเลือกคำอธิบาย
--appระบุแอปที่ต้องการ (ค่าเริ่มต้น: ทุกแอป)
bench generate-pot-file --app erpnext

อ้างอิง: bench generate-pot-file


2. ย้ายจาก CSV เป็น PO

bench migrate-csv-to-po [OPTIONS]

แปลงไฟล์แปลภาษา CSV แบบเดิมไปเป็นรูปแบบ PO ต้องมีไฟล์ POT อยู่ก่อนจึงจะใช้คำสั่งนี้ได้

ตัวเลือกคำอธิบาย
--appระบุแอปที่ต้องการ (ค่าเริ่มต้น: ทุกแอป)
--localeระบุภาษาที่ต้องการ (ค่าเริ่มต้น: ทุกภาษา)
bench migrate-csv-to-po --app erpnext --locale th

อ้างอิง: bench migrate-csv-to-po


3. อัปเดตไฟล์ PO

bench update-po-files [OPTIONS]

ซิงค์ไฟล์ PO กับไฟล์ POT ล่าสุด — ลบข้อความที่ไม่ใช้แล้วและเพิ่มข้อความใหม่ ควรรันหลังจาก generate-pot-file ทุกครั้ง

ตัวเลือกคำอธิบาย
--appระบุแอปที่ต้องการ (ค่าเริ่มต้น: ทุกแอป)
--localeระบุภาษาที่ต้องการ (ค่าเริ่มต้น: ทุกภาษา)
bench update-po-files --app erpnext --locale th

อ้างอิง: bench update-po-files


4. คอมไพล์ PO เป็น MO

bench compile-po-to-mo [OPTIONS]

แปลงไฟล์ PO เป็นไฟล์ MO (Machine Object) แบบ binary สำหรับใช้งานจริง ไฟล์จะถูกเก็บที่ sites/assets/locale/

คำสั่งนี้รันอัตโนมัติเมื่อใช้ bench build หรือ bench update

ตัวเลือกคำอธิบาย
--appระบุแอปที่ต้องการ (ค่าเริ่มต้น: ทุกแอป)
--localeระบุภาษาที่ต้องการ (ค่าเริ่มต้น: ทุกภาษา)
--forceบังคับคอมไพล์ใหม่แม้ไฟล์ MO จะใหม่กว่า PO
bench compile-po-to-mo --app erpnext --locale th
bench compile-po-to-mo --force

อ้างอิง: bench compile-po-to-mo


แอป translation_tools

translation_tools เป็นแอป Frappe ที่เราพัฒนาขึ้นเพื่อทำงานแปลภาษา ASEAN ทั้งหมดอัตโนมัติ รองรับทั้งไฟล์ Python มาตรฐานของ Frappe และไฟล์ React/TypeScript (SPA) ด้วย

ภาษาที่รองรับ (ASEAN)

ภาษารหัส
ไทยth
เวียดนามvi
ลาวlo
เขมรkm
พม่าmy
อังกฤษen

Pipeline อัตโนมัติ

Source Code (Python + React/TypeScript)

Extract ข้อความที่แปลได้ (รวม SPA)

CSV files (th.csv, vi.csv, lo.csv, km.csv, my.csv)

generate-pot-file → main.pot

migrate-csv-to-po → locale/th.po, locale/lo.po, ...

update-po-files → ซิงค์กับ POT ล่าสุด

compile-po-to-mo → sites/assets/locale/th/LC_MESSAGES/app.mo

Frappe ใช้ MO files สำหรับ __("text") ตอน runtime

Bench Commands ของ translation_tools

นอกจากคำสั่ง Frappe มาตรฐาน แอปนี้เพิ่มคำสั่งเฉพาะ:

# รัน pipeline ทั้งหมด (CSV → POT → PO → MO) สำหรับแอป
bench gen-po --site [site] --app [app_name]

# ย้าย CSV เป็น PO พร้อมรองรับ SPA strings
bench migrate-csv-to-po-spa --site [site] --all-apps

# คอมไพล์ MO files
bench compile-translation-mo-files --site [site] --force --app [app_name]

# อัปเดตการแปลสำหรับแอปเฉพาะ
bench update-app-translations --site [site] --app [app_name] --locale th

# ดูรายชื่อแอปที่รองรับการแปล
bench list-translatable-apps --site [site]

การทำงานอัตโนมัติ

translation_tools ทำงานอัตโนมัติผ่าน hooks ของ Frappe:

ทริกเกอร์การทำงาน
After Installรัน pipeline ทั้งหมด + ตั้งค่า SPA support
After Migrateอัปเดต CSV, ย้าย CSV→PO, ตั้งค่า workspace
ทุกนาทีตรวจสอบและรัน scheduled translation tasks
ทุกชั่วโมงรัน schedules ที่พลาด, refresh PO files
ทุกวัน 00:00 (BKK)ซิงค์ไฟล์แปลกับ GitHub อัตโนมัติ
ทุกวันคอมไพล์ MO, ตรวจสอบ AI model, ล้าง logs เก่า

SPA Translation Support

สิ่งที่แตกต่างจากระบบ Frappe มาตรฐานคือ translation_tools สามารถดึงข้อความจากไฟล์ React/TypeScript ได้:

รูปแบบที่รองรับ:

  • __("ข้อความ") — translation calls (หลัก)
  • >ข้อความ< — JSX text
  • title="ข้อความ", placeholder="ข้อความ" — props
  • toast.success("ข้อความ") — toast messages
  • Error("ข้อความ") — error messages

การแก้ไขจาก Frappe: Frappe มาตรฐานจะข้ามข้อความที่ยังไม่มีคำแปล แต่ translation_tools เขียนข้อความทั้งหมดลงไฟล์ CSV/PO เพื่อให้นักแปลมองเห็นทุก string ที่ต้องแปล


AI Translation

รองรับการแปลอัตโนมัติผ่าน AI:

ProviderModel
OpenAIgpt-4.1-mini
AnthropicClaude
  • Batch size: 10 ข้อความต่อครั้ง
  • Temperature: 0.3 (ค่าต่ำเพื่อความแม่นยำ)
  • จัดการผ่าน Bulk Translation Job doctype

GitHub Integration

ซิงค์ไฟล์แปลกับ GitHub repository อัตโนมัติ:

  • สร้าง Pull Request สำหรับการเปลี่ยนแปลงใหม่
  • ซิงค์อัตโนมัติทุกวันเที่ยงคืน (เวลาไทย)
  • ใช้ Personal Access Token (PAT) สำหรับ authentication

ขอบคุณ

ระบบแปลภาษานี้พัฒนาต่อยอดจากระบบ Translation ของ Frappe Framework เอกสารอ้างอิง: docs.frappe.io

On this page