เครื่องมือแปลภาษา (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") ตอน runtimeBench 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 texttitle="ข้อความ",placeholder="ข้อความ"— propstoast.success("ข้อความ")— toast messagesError("ข้อความ")— error messages
การแก้ไขจาก Frappe: Frappe มาตรฐานจะข้ามข้อความที่ยังไม่มีคำแปล แต่ translation_tools เขียนข้อความทั้งหมดลงไฟล์ CSV/PO เพื่อให้นักแปลมองเห็นทุก string ที่ต้องแปล
AI Translation
รองรับการแปลอัตโนมัติผ่าน AI:
| Provider | Model |
|---|---|
| OpenAI | gpt-4.1-mini |
| Anthropic | Claude |
- 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