ชุมชนนักพัฒนากำลังมีส่วนร่วมในการอภิปรายอย่างเข้มข้นเกี่ยวกับวิธีการแปลซอฟต์แวร์ หลังจากการเผยแพร่แนวทางการทำ internationalization แบบกำหนดเองของ SumatraPDF โปรแกรมดู PDF ยอดนิยมที่รองรับ 72 ภาษา เลือกที่จะสร้างระบบแปลของตัวเองแทนที่จะใช้โซลูชันที่มีอยู่แล้วเช่น GNU gettext หรือบริการเชิงพาณิชย์
สถิติระบบแปลภาษาของ SumatraPDF :
- สตริงที่สามารถแปลได้ 341 สตริง
- รองรับ 72 ภาษา
- รวบรวมการแปลสตริงทั้งหมด 35,440 การแปล
- โค้ด C++ สำหรับการแปลภาษา 239 บรรทัด
- โค้ด Go สำหรับเซิร์ฟเวอร์ AppTranslator 4,000 บรรทัด
ข้อถกเถียงเรื่องโซลูชันแบบกำหนดเอง
นักพัฒนาของ SumatraPDF ได้สร้างระบบนิเวศการแปลที่สมบูรณ์ตั้งแต่เริ่มต้น รวมถึงเว็บแอปพลิเคชันที่เรียกว่า AppTranslator สำหรับการแปลแบบ crowdsourcing และโค้ด C++ แบบกำหนดเองสำหรับจัดการการสลับภาษา ระบบนี้ใช้แมโครง่ายๆ เช่น _TRA()
และ _TRN()
เพื่อทำเครื่องหมายสตริงที่สามารถแปลได้ และประมวลผลผ่านสคริปต์ Go อย่างไรก็ตาม แนวทางนี้ได้รับการวิพากษ์วิจารณ์อย่างมากจากนักพัฒนาที่มีประสบการณ์ที่โต้แย้งว่าโซลูชันที่มีอยู่แล้วจะเหมาะสมกว่า
การถกเถียงมุ่งเน้นไปที่ว่าการประดิษฐ์เครื่องมือที่มีอยู่แล้วใหม่นั้นมีความชอบธรรมหรือไม่ นักวิจารณ์ชี้ให้เห็นว่าโซลูชันแบบกำหนดเองขาดคุณสมบัติสำคัญ เช่น การรองรับรูปแบบพหูพจน์และการจัดรูปแบบตำแหน่ง ซึ่งเป็นมาตรฐานในเฟรมเวิร์กการแปลที่เป็นผู้ใหญ่ คุณสมบัติเหล่านี้มีความสำคัญเมื่อต้องจัดการกับภาษาที่มีกฎไวยากรณ์ที่ซับซ้อนหรือโครงสร้างประโยคที่แตกต่างกัน
ส่วนประกอบของระบบแปลภาษา:
- มาโคร
_TRA()
: ขยายเป็นการเรียกใช้ฟังก์ชันแปลภาษา - มาโคร
_TRN()
: ขยายเป็นสตริงภาษาอังกฤษสำหรับการแปลภาษาแบบเลื่อนเวลา - AppTranslator: เว็บแอปพลิเคชันแบบกำหนดเองสำหรับการแปลภาษาแบบ crowdsourcing
- สคริปต์ Go: ดึงสตริงจากซอร์สโค้ดโดยใช้ regex
- การค้นหาแบบเชิงเส้น: วิธีการสำหรับค้นหาการแปลภาษาในอาร์เรย์ C++
คุณสมบัติที่ขาดหายไปและข้อจำกัดทางเทคนิค
นักพัฒนาหลายคนเน้นช่องว่างที่สำคัญในแนวทางแบบกำหนดเอง ระบบถือว่าสตริงภาษาอังกฤษเป็นทั้งข้อความแสดงผลและคีย์การแปล ซึ่งอาจทำให้เกิดปัญหาเมื่อคำภาษาอังกฤษเดียวกันต้องการการแปลที่แตกต่างกันขึ้นอยู่กับบริบท นอกจากนี้ วิธีการค้นหาเชิงเส้นสำหรับการค้นหาการแปล แม้จะง่าย แต่อาจไม่สามารถขยายขนาดได้ดีสำหรับแอปพลิเคชันที่ใหญ่กว่า
Internationalization และ localization เป็นปัญหาที่ยากมาก ฉันรู้เพราะฉันเคยทำงานเป็นนักแปลเทคนิคมาหลายปี
การขาดการรองรับรูปแบบพหูพจน์เป็นปัญหาเป็นพิเศษ เนื่องจากภาษาต่างๆ จัดการกับพหูพจน์ในรูปแบบที่แตกต่างกันอย่างมาก บางภาษามีรูปแบบพหูพจน์หลายแบบ ในขณะที่ภาษาอื่นๆ ใช้โครงสร้างไวยากรณ์ที่แตกต่างกันโดยสิ้นเชิงที่การแทนที่สตริงง่ายๆ ไม่สามารถจัดการได้
โซลูชันทางเลือกและแนวทางสมัยใหม่
สมาชิกชุมชนแนะนำทางเลือกที่มีอยู่แล้วหลายอย่างที่สามารถประหยัดเวลาการพัฒนาในขณะที่ให้ฟังก์ชันการทำงานที่ดีกว่า GNU gettext ยังคงเป็นที่นิยมสำหรับชุดคุณสมบัติที่ครอบคลุมและการรองรับเครื่องมือที่กว้างขวาง บริการเช่น Weblate , Transifex และ translatewiki.net เสนอการจัดการการแปลบนเว็บพร้อมคุณสมบัติการทำงานร่วมกันในตัวและการสนับสนุนจากผู้เชี่ยวชาญ
สำหรับแอปพลิเคชันเฉพาะ Windows นักพัฒนาบางคนแนะนำให้ใช้ระบบ Multilingual User Interface (MUI) ของ Microsoft ซึ่งให้การผสานรวมแพลตฟอร์มดั้งเดิมและการรองรับเครื่องมืออย่างกว้างขวาง คนอื่นๆ แนะนำระบบการแปลของ Qt สำหรับแอปพลิเคชันข้ามแพลตฟอร์ม
แนวทางสมัยใหม่ที่น่าสนใจได้เกิดขึ้นจากการอภิปราย: การใช้โมเดลภาษา AI สำหรับการแปลเริ่มต้น แม้ว่าสิ่งนี้จะก่อให้เกิดการถกเถียงของตัวเองเกี่ยวกับคุณภาพการแปล นักพัฒนาบางคนรายงานความสำเร็จในการใช้ AI สำหรับองค์ประกอบ UI พื้นฐาน แม้ว่าพวกเขาจะยอมรับว่าการตรวจสอบโดยมนุษย์ยังคงเป็นสิ่งจำเป็นสำหรับการแปลที่มีคุณภาพ
โซลูชันการแปลทางเลือกที่ได้รับการกล่าวถึง:
- GNU gettext: ใช้ไฟล์ .po รวมถึงเครื่องมือสกัดข้อมูล xgettext
- Weblate: แพลตฟอร์มการแปลบนเว็บแบบโอเพนซอร์ส
- Transifex: บริการแปลเชิงพาณิชย์
- translatewiki.net: แพลตฟอร์มการแปลชุมชนสำหรับโอเพนซอร์ส
- Microsoft MUI: ระบบอินเทอร์เฟซหลายภาษาดั้งเดิมของ Windows
- Qt Translation System: โซลูชันข้ามแพลตฟอร์มพร้อมเครื่องมือที่ครอบคลุม
ปรัชญาการพัฒนาในวงกว้าง
ข้อถกเถียงสะท้อนให้เห็นการแบ่งแยกทางปรัชญาที่ลึกซึ้งกว่าในการพัฒนาซอฟต์แวร์ระหว่างการสร้างโซลูชันแบบกำหนดเองกับการนำเครื่องมือที่มีอยู่มาใช้ ในขณะที่แนวทางของ SumatraPDF แสดงให้เห็นทักษะทางวิศวกรรมที่น่าประทับใจและให้การควบคุมที่สมบูรณ์เหนือกระบวนการแปล นักวิจารณ์โต้แย้งว่ามันแสดงถึงความซับซ้อนที่ไม่จำเป็นสำหรับปัญหาที่แก้ไขแล้ว
การอภิปรายยังเน้นความสำคัญของการเข้าใจขอบเขตปัญหาก่อนที่จะเลือกโซลูชัน สิ่งที่อาจดูเหมือนงานแปลง่ายๆ สามารถกลายเป็นเรื่องซับซ้อนได้อย่างรวดเร็วเมื่อต้องจัดการกับหลายภาษา บริบททางวัฒนธรรม และข้อกำหนดการเข้าถึง ฉันทามติของชุมชนแนะนำว่าในขณะที่โซลูชันแบบกำหนดเองมีที่ของมัน เครื่องมือที่มีอยู่แล้วมักให้คุณค่าระยะยาวที่ดีกว่าสำหรับปัญหาทั่วไปเช่น internationalization
อ้างอิง: Implementing UI translation in SumatraPDF, a C++ Windows application