Tags:
Node Thumbnail

บทความนี้เป็นตอนแรกของซีรีย์ "ระดมพลนักแปล" ความยาว 4 ตอน เป้าหมายหลักคือส่งเสริมให้ผู้ใช้ซอฟต์แวร์โอเพนซอร์สในประเทศไทยเข้ามามีส่วนร่วมกับการพัฒนามากขึ้น โดยเริ่มจากงานง่ายๆ อย่างการแปลส่วนติดต่อผู้ใช้หรือเอกสารก่อน

ในตอนแรกนี้ผมจะแนะนำข้อมูลคร่าวๆ ของวงการแปลก่อน ส่วนตอนต่อๆ ไปนั้นได้ผู้เชี่ยวชาญของการแปลซอฟต์แวร์โครงการใหญ่ๆ 3 ตัว (GNOME, KDE, Ubuntu) มาเจาะลึกลงรายละเอียดของแต่ละโครงการให้

ทำไมจึงต้องแปล

คำถามที่พบบ่อยที่สุดในหมู่ power user ในประเทศไทยคือ "ทำไมจึงต้องแปลเมนูเป็นภาษาไทย" ส่วนสาเหตุนั้นส่วนมากจะอธิบายว่าคุ้นกับเมนูภาษาอังกฤษมากกว่า หรือแปลแล้วอ่านไม่เข้าใจ

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

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

เข้าสู่โลกของการแปล

คำศัพท์สำคัญที่ควรรู้มีสองคำ คือ Internationalization (ตัวย่อ i18n -- เหตุผลที่ย่อแบบนี้ลองนับตัวอักษรดูครับ) ซึ่งแปลว่าการทำให้เป็นสากล กับ Localization (l10n) หรือการทำให้เป็นท้องถิ่น

สองแนวคิดนี้ไม่เหมือนกันแต่อยู่ร่วมกันได้ i18n คือการทำให้ซอฟต์แวร์ตัวใดตัวหนึ่งรองรับการใช้งานในทุกภาษาโดยไม่ต้องติดตั้งอะไรเพิ่มเติม แนวคิด i18n นั้นสำคัญมากในช่วงหลัง เพราะถ้าซอฟต์แวร์เวอร์ชันเดียวสามารถนำไปใช้ได้ทุกประเทศ ค่าใช้จ่ายในการสนับสนุนจะลดลงมหาศาล ตัวอย่างที่ชัดเจนคือ Windows ในสมัยก่อนถ้าจำกันได้จะมี Thai Edition แต่พอมาเป็นยุค XP นั้นไม่มีแล้ว ไม่ว่าเราจะเดินไปใช้คอมพิวเตอร์ที่ไหนในโลกที่เป็น XP มันจะ "อ่าน" ภาษาไทยได้เสมอ

ส่วน l10n หรือการทำให้เป็นท้องถิ่นนั้นเป็นระดับที่อยู่สูงกว่า i18n คือไม่จำเป็น แต่มีได้ก็ดี (ในบางประเทศที่ไม่นิยมใช้ภาษาอังกฤษก็เป็นเรื่องสำคัญ แต่ในไทยก็ไม่ขนาดนั้น) ส่วนใหญ่แล้ว l10n มักหมายถึงการแปลส่วนติดต่อผู้ใช้ แต่จริงๆ ยังรวมถึงวิธีการใช้งานด้านอื่นด้วย เช่น ระบบตัวเลข ระบบเงินตรา เขตเวลา ไปจนถึงยี่ห้อของ search engine ที่มากับ Firefox ในแต่ละภาษาจะเปลี่ยนไปตามความนิยมของประเทศนั้นๆ

ในบทความชุดนี้จะเน้นเรื่องการแปล (translation) ซึ่งเป็นซับเซ็ตใหญ่ใน l10n

การแปลซอฟต์แวร์โอเพนซอร์ส

ซอฟต์แวร์ส่วนมากในปัจจุบันแยกข้อความ (string หรือ message) ออกจากตัวโค้ดเพื่อความสะดวกในการแปล ฟอร์แมตของข้อความเหล่านี้ที่นิยมใช้คือ GNU Gettext ซึ่งมีไฟล์​3 ชนิด ดังนี้

  • .po เป็นไฟล์ plain text ธรรมดาที่เก็บข้อความแปลเรียงต่อกันไปเรื่อยๆ เราใช้ไฟล์นี้เป็นหลักในการแปล
  • .mo ไฟล์ไบนารีที่แปลงจาก .po เพื่อให้คอมพิวเตอร์อ่านได้ (คำสั่งที่ใช้แปลงคือ msgfmt แต่โปรแกรมแปลหลายตัวก็รวมความสามารถนี้ไว้ในตัวแล้ว)
  • .pot เทมเพลตสำหรับ .po คือไฟล์ .po ว่างๆ ที่ยังไม่ได้ทำการแปล ใช้เฉพาะเวลาเริ่มแปลโปรแกรมใหม่เท่านั้น และดาวน์โหลดไฟล์นี้ได้จากเว็บโครงการ

โครงสร้างของไฟล์ .po เก็บข้อมูลง่ายๆ ดังตัวอย่าง

#: ../data/gedit.desktop.in.in.h:1
msgid "Edit text files"
msgstr "แก้ไขแฟ้มข้อความ"

บรรทัดแรกคือคอมเมนต์​ส่วน msgid คือข้อความต้นตำรับ และ msgstr คือข้อความที่แปล

ปกติแล้ววิธีดูภาษาของการแปลจะดูตามชื่อไฟล์ มักอยู่ในรูป appnames.langcode.po เช่น gedit.th.po สำหรับภาษาไทยใช้ th เสมอ ในบางกรณีอาจเห็นเป็น th-TH ซึ่งตัวหลังหมายถึงรหัสประเทศ (เพราะบางภาษาแตกต่างกันเล็กน้อยในแต่ละประเทศ อย่าง en-US หรือ en-GB เป็นต้น)

ขั้นตอนและเครื่องมือในการแปล

โดยทั่วไป ขั้นตอนในการแปลมีดังนี้

  1. เลือกโปรแกรมที่สนใจ
  2. หาไฟล์ .po (ในกรณีที่มีคนเริ่มไว้ให้แล้ว) หรือ .pot (แล้วนำมาเปลี่ยนชื่อเป็น .po)
  3. ลงมือแปลด้วย text editor ตามชอบ
  4. แปลงไฟล์ .po เป็น .mo
  5. นำ .mo ไปทดสอบว่าที่แปลไปนั้นใช้ได้แค่ไหน
  6. ส่งไฟล์ .po ที่สมบูรณ์กลับไปยังโครงการ

ขั้นตอนในข้อ 3. นั้นใช้ text editor อะไรก็ได้ (ปกติผมใช้ Gedit นี่ล่ะ) แต่ก็มีโปรแกรมเฉพาะทางสำหรับการแปลที่มีเครื่องมืออำนวยความสะดวกเพิ่มเติมให้ (เช่น ตรวจคู่วงเล็บ, นับคำที่ยังไม่แปล ฯลฯ) ที่นิยมคือ Poedit (cross-platform), gtranslator (Linux), OmegaT+ (Java) และ LocFactory Editor (Mac)

ส่วนข้อ 4. โปรแกรมที่ใช้แปลงอยู่ในชุด gettext ซึ่งมีในลินุกซ์ทุกยี่ห้อ (สั่ง apt-get install gettext มาได้โดยตรงบน Ubuntu หรือ Debian) โปรแกรมช่วยแปลที่ยกตัวอย่างมาส่วนมากก็มีความสามารถนี้มาให้ในตัว (มักใช้ชื่อว่า compile ในเมนู) การแปลง .po เป็น .mo ทำได้ง่ายๆ โดยใช้คำสั่ง

msgfmt app.th.po

เราจะได้ app.th.mo มา ซึ่งเมื่อนำไปวางไว้ยังไดเรคทอรีที่กำหนด (แตกต่างกันตามแต่ละซอฟต์แวร์และระบบปฏิบัติการ) โปรแกรมของเราจะขึ้นภาษาไทยให้เลือกทันที

เมื่อแปลเสร็จแล้ว เราก็จะส่งไฟล์ .po กลับไปยังโครงการต้นน้ำ (upstream) เพื่อทำการรวมเป็นแพกเกจสำหรับแจกจ่าย ถ้าเป็นโครงการที่เราเป็นคนไทยคนแรกที่เข้าไปช่วยแปล ให้ติดต่อไปยังทีมงานพัฒนาเพื่อส่งไฟล์ (บางโครงการจะให้เราขอสิทธิ์ CVS commit โดยตรง) แต่ถ้าเป็นโครงการที่มีคนไทยแปลอยู่แล้ว ให้ส่งไฟล์ไปยังหัวหน้าทีมแปลไทยหรือ project co-ordinator ได้โดยตรง

ในปัจจุบันเริ่มมีระบบแปลผ่านเว็บเพื่อความสะดวกในการแปล ตัวอย่างสำคัญคือ Launchpad ของ Ubuntu การแปลผ่านเว็บทำได้ง่ายกว่าการแปลปกติมาก อย่างไรก็ตาม ยังมีปัญหาเรื่องการควบคุมคุณภาพของการแปลผ่านเว็บอยู่เยอะเช่นกัน (เช่น มีใครจากไหนไม่รู้มาแก้คำแปลมั่วๆ หรือแปลไม่ไปในทิศทางเดียวกัน) ถ้าเป็นไปได้ ควรติดต่อทีมแปลก่อนเสมอ

คำแนะนำสำหรับผู้เริ่มแปล

การแปลนั้นทำได้ง่ายมากๆ แต่ถ้าจะแปลให้ได้งานคุณภาพดี มีเทคนิคที่ควรสนใจหลายประการ

  • การแปลไฟล์ .po นั้นเราไม่เห็นว่าข้อความจะถูกนำไปใช้ที่ไหนบ้าง ควรเปิดตัวโปรแกรมจริงประกอบ และมีความรู้ความเชี่ยวชาญในตัวโปรแกรมนั้นพอสมควร
  • ระมัดระวังเรื่องการสะกดผิด โดยเฉพาะพิมพ์วรรณยุกต์เกิน
  • ความสม่ำเสมอในการแปลเป็นเรื่องสำคัญมาก ควรแปลให้เหมือนกันในทุกที่ที่มีคำนั้น และคำศัพท์ที่พบบ่อยจำนวนมาก มีข้อตกลงกันในหมู่นักแปลแล้ว ว่าจะแปลเป็นภาษาไทยว่าอะไร (ดู OSS Glossary ของเนคเทค)
  • ระมัดระวังการแปลข้อความขนาดยาว ภาษาไทยจะมีปัญหาเรื่องตัดคำในบางโปรแกรม
  • การแปลสำนวนจากภาษาอังกฤษเป็นภาษาไทย ไม่ได้แปลตรงตัวเสมอไป
  • การแปลทำงานกันเป็นทีม ควรพูดคุยกับผู้แปลที่ลงทะเบียนกับทางโครงการโอเพนซอร์สไว้แล้วก่อน เพื่อทราบระเบียบและธรรมเนียมปฏิบัติ
  • มีปัญหาเรื่องการแปล ร่วมพูดคุยกันในเมลลิ่งลิสต์นักแปลภาษาไทย Thai Localization Group
  • รายละเอียดเพิ่มเติมสำหรับผู้เริ่มต้นแปล อ่านได้จาก Thai L10n

โปรแกรมอะไรบ้างที่ควรแปล

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

โครงการที่ยังไม่มีผู้ดูแลภาษาไทย

  • Fedora
  • OpenSUSE
  • Mozilla (ยังอยู่ช่วงเสนอให้ภาษาไทยเป็น supported language)
  • WordPress (ผมเคยแปลไว้แต่ไม่ได้ดูแลต่อแล้ว)
  • Adium

ตอนหน้ามาว่ากันเรื่องการแปลใน GNOME ครับ

Get latest news from Blognone

Comments

By: Mr.JoH
Writer
on 29 March 2008 - 00:50 #46714

โอ๊ว เป็นบทความที่ดีมากครับ

Lastest Science News @Jusci.net


Lastest Science News @Jusci.net

By: HyBRiD
ContributoriPhoneSymbianUbuntu
on 29 March 2008 - 03:03 #46725
HyBRiD's picture

เอาใจช่วยละกันครับ

NERD GOD

By: mnop
Android
on 29 March 2008 - 07:09 #46729

ผมจำได้ว่า 2 ปีก่อนที่พยายามจะแปลเมนูและคำสั่งใน MediaWiki (โอเพ่นซ้อดตัวนึง) เป็นภาษาไทยก็โดนแอดมิน super power users คัดค้านมาตลอดนะครับ บอกว่าไม่คุ้นบ้างไม่มีใครใช้กันบ้าง ซึ่งผมและคนอื่นก็ไม่สนใจแอดมินเหล่านั้น เอาหูไปนาซะแล้วก็ก้มหน้าแปลต่อไป เพราะรู้ว่าคนใช้วิกิพีเดียวันละแสนคนก็เป็นผู้ใช้ทั่วไป ไม่ได้เป็นพวกพาวเวอร์เรนเจอร์ที่มีสิบยี่สิบคน

โดยปัญหาหลักของการแปลก่อนหน้านี้ คือ คนแปลไม่ได้ใช้ คนใช้ไม่ได้แปล ข้อความที่แปลเลยแปลกๆ และยิ่งกว่านั้นอย่างที่รู้กันว่า สายวิทย์กับสายศิลป์ไม่เคยไปด้วยกัน คนใช้คอมพูดภาษาไทยกับอังกฤษไม่ได้ พูดได้แต่ภาษาซีกับภาษาจาวา

ถ้าใครสนใจแปลมีเดียวิกิก็ลองดูได้ที่
http://translatewiki.net/
แต่ก่อนใช้เป็น patch ผ่าน bugzilla กว่าจะรู้จักว่า patch, bug, BOM คืออะไร ก็เสียเวลา ตอนนี้ทำผ่านเว็บง่ายกว่าเยอะ

ส่วน Glossary ของเนคเทค ก็บางที เอ่อ เอ่อ ไม่มีความเห็นละกัน เพราะเป็นในกรณีเดียวกันคือคนใช้คนแปลไม่ได้รับรอง คนรับรองไม่ได้ใช้ไม่ได้แปล และระบบของ Glossary น่าจะมีการปรับปรุง น่าจะดีกว่านี้ (เคยรอมาหลายปี แต่ก็เป็นเหมือนเดิม) นอกจากนี้น่าจะมีแบ่งแยกเพราะศัพท์อังกฤษ ที่หน้าที่ต่างกัน noun, verb ก็ใช้คนละความหมาย หรือแม้แต่ active, passive ก็เช่นกัน

Thai Localization Group ก็ดีครับ แต่น่าจะมีนักภาษาศาสตร์ คนธรรมดาที่ไม่ใช่lnwบ้างก็ดีนะครับ ข้อความที่ใช้จะได้ไม่ดูประหลาดมากจนคนทั่วไปไม่รู้จักกัน เหมือนกรณี "ลิงก์ภายนอก" ในวิกิพีเดียที่เถียงกันสามวันเจ็ดวันไม่จบ ระหว่างแอดมินlnw กับชาวบ้านคนอื่น ที่ท่านlnwรับไม่ได้ถ้าคนอื่นไม่ยอมรับคำว่า "ลิงก์ภายนอก" นี้

สุดท้ายยังไงก็คงต้องลดอีโก้ลง เพราะคนใช้ซอฟต์แวร์ไทยยังไงก็ใช้ภาษาไทย เพื่อพัฒนาในภาพรวมและลด learning curve

แฮะแฮะ มาบ่นอย่างเดียว (สงสัยจะโดนอีกแหง)

ยังไงก็เอาใจช่วยเหมือนความเห็นด้านบนครับ ถ้าไปช่วยด้วยคงโดนอีกหลายดอก โดยรุมในวิกิพีเดียไทยมามากพอแล้ว เซ็งเป็ด

http://itshee.exteen.com/ -- Can you upgrade Vista to XP Pro?

By: avaya
Android
on 29 March 2008 - 08:01 #46732 Reply to:46729
avaya's picture

แสดงว่าที่ผมเข้าใจมาตลอดว่าคุณ manop คือแอดมินlnw (ขอเขียนตามอย่าง) ของ wiki นี่ผมเข้าใจผิดมาตลอดสิเนี่ย

By: molek
WriteriPhoneWindows Phone
on 29 March 2008 - 09:42 #46736 Reply to:46729
molek's picture

ถ้าต้องการความร่วมมือ สิ่งสำคัญก็คือลดอีโก้ตามที่ว่ามาจริง ๆ แหละครับ ยอมรับในสิ่งที่คนทั่วไปมากกว่าคิดก็จะได้รับความร่วมมือคครับ ยังไงโครงการนี้ผมจะช่วยแปลได้เท่าที่แปลได้นะครับ

molecularck โม-เล-กุล-ซี-เค
sci news on foosci.com


http://www.digimolek.com

By: mk
FounderAndroid
on 29 March 2008 - 23:24 #46782 Reply to:46729
mk's picture

ตอนเขียนบทความผมพยายามหาลิงก์แปล mediawiki แต่ก็หาไม่เจอ ขอบคุณครับ

By: thep
Writer
on 31 March 2008 - 10:49 #46920 Reply to:46729

เรื่อง OSS glossary นี่ ปัญหาหลักคือคนดูแลไม่พอกับปริมาณงานครับ ทำให้ดูแลไม่ทั่วถึง เท่าที่ทำกันอยู่ คือเมื่อมีการอภิปรายคำไหน ก็จะไป approve คำนั้นให้ตรงกับที่อภิปรายไว้ ซึ่งวิธีแก้ก็คือ ยกคำขึ้นมาอภิปรายใน mailing list ให้มากที่สุด ได้ข้อสรุปมากเท่าไร ก็ update glossary ได้ครอบคลุมมากเท่านั้น

ในอีกทางหนึ่ง ผมก็เสนอให้พยายามลดปริมาณงาน ด้วยการลบคำที่ไม่จำเป็นออก ซึ่งทั้งระดมกำลัง ทั้งทยอยทำมาเรื่อย ๆ ก็ยังลบได้ไม่เท่าไร เรื่องของเรื่องคือ แนวคิดของคนที่สร้าง glossary คือ เขาใส่รายการคำเข้าไปให้มากที่สุด แล้วคาดหวังว่าจะมีคนช่วยกันแปล ช่วยกัน approve จำนวนมาก จนได้ glossary ที่สมบูรณ์ ซึ่งมันขัดกับสภาพการณ์จริง ในเมื่อทุกคำต้องมาจากการอภิปรายตกลงกัน

ทางที่จะแก้ได้ก็คือ แปลกันให้มากขึ้น อภิปรายกันให้มากขึ้น (ใน mailing list) เพื่อให้พัฒนา glossary ให้ได้มากที่สุด และหากจะนัดกันล้างป่าช้าสักหลายครั้ง ก็คงช่วยได้เหมือนกัน (ผมเคยเสนอเป็นหัวข้อใน codefest แต่สุดท้ายก็ตกไป)

By: wiennat
Writer
on 29 March 2008 - 22:58 #46780

จริงๆแล้วนอกจากโปรแกรมแล้ว การแปล Document ก็เป็นสิ่งที่ต้องสนับสนุนเป็นอันดับสองครับ


onedd.net

By: noomz
AndroidSymbianUbuntu
on 30 March 2008 - 13:34 #46819

ไฟล์ .po นี่ใช้ utf-8 รึเปล่าครับ

By: mk
FounderAndroid
on 30 March 2008 - 16:02 #46828 Reply to:46819
mk's picture

ใช้ครับ

By: thep
Writer
on 31 March 2008 - 10:27 #46916

i18n คือการทำให้ซอฟต์แวร์ตัวใดตัวหนึ่งรองรับการใช้งานในทุกภาษาโดยไม่ต้องติดตั้งอะไรเพิ่มเติม

ขอแก้นิดหนึ่งครับ การทำให้รองรับทุกภาษาพร้อมกัน "โดยไม่ต้องติดตั้งอะไรเพิ่มเติม" น่าจะเรียกว่า m17n (multilingualization) ครับ ส่วน i18n นั้น คู่กับ l10n โดย i18n เป็นการเตรียมโครงสร้างพื้นฐานสำหรับการรองรับนานาภาษา ซึ่งจะเติมเต็มด้วย l10n โดยการติดตั้ง l10n resource ต่าง ๆ เข้าไป ทำให้ซอฟต์แวร์นั้น ๆ สนับสนุนภาษาที่ต้องการในทันที