นักพัฒนาถกเถียงเรื่องโซลูชันการแปลภาษาหลังจาก SumatraPDF ใช้วิธีการแบบกำหนดเองที่ก่อให้เกิดข้อถกเถียง

ทีมชุมชน BigGo
นักพัฒนาถกเถียงเรื่องโซลูชันการแปลภาษาหลังจาก SumatraPDF ใช้วิธีการแบบกำหนดเองที่ก่อให้เกิดข้อถกเถียง

ชุมชนนักพัฒนากำลังมีส่วนร่วมในการอภิปรายอย่างเข้มข้นเกี่ยวกับวิธีการแปลซอฟต์แวร์ หลังจากการเผยแพร่แนวทางการทำ 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