บทความนี้เป็นตอนแรกของซีรีย์ "ระดมพลนักแปล" ความยาว 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 เก็บข้อมูลง่ายๆ ดังตัวอย่าง
#: ../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 เป็นต้น)
โดยทั่วไป ขั้นตอนในการแปลมีดังนี้
ขั้นตอนในข้อ 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 การแปลผ่านเว็บทำได้ง่ายกว่าการแปลปกติมาก อย่างไรก็ตาม ยังมีปัญหาเรื่องการควบคุมคุณภาพของการแปลผ่านเว็บอยู่เยอะเช่นกัน (เช่น มีใครจากไหนไม่รู้มาแก้คำแปลมั่วๆ หรือแปลไม่ไปในทิศทางเดียวกัน) ถ้าเป็นไปได้ ควรติดต่อทีมแปลก่อนเสมอ
การแปลนั้นทำได้ง่ายมากๆ แต่ถ้าจะแปลให้ได้งานคุณภาพดี มีเทคนิคที่ควรสนใจหลายประการ
ถ้าตอบแบบง่ายๆ คือโปรแกรมอะไรก็ได้ที่คุณสนใจ และทางโครงการเปิดโอกาสให้คนช่วยกันแปล แต่ปัจจุบันโครงการที่มีการแปลภาษาไทยบ้างแล้ว มีดังนี้
โครงการที่ยังไม่มีผู้ดูแลภาษาไทย
ตอนหน้ามาว่ากันเรื่องการแปลใน GNOME ครับ
Comments
โอ๊ว เป็นบทความที่ดีมากครับ
Lastest Science News @Jusci.net
Lastest Science News @Jusci.net
เอาใจช่วยละกันครับ
NERD GOD
ผมจำได้ว่า 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?
แสดงว่าที่ผมเข้าใจมาตลอดว่าคุณ manop คือแอดมินlnw (ขอเขียนตามอย่าง) ของ wiki นี่ผมเข้าใจผิดมาตลอดสิเนี่ย
ถ้าต้องการความร่วมมือ สิ่งสำคัญก็คือลดอีโก้ตามที่ว่ามาจริง ๆ แหละครับ ยอมรับในสิ่งที่คนทั่วไปมากกว่าคิดก็จะได้รับความร่วมมือคครับ ยังไงโครงการนี้ผมจะช่วยแปลได้เท่าที่แปลได้นะครับ
molecularck โม-เล-กุล-ซี-เค
sci news on foosci.com
http://www.digimolek.com
ตอนเขียนบทความผมพยายามหาลิงก์แปล mediawiki แต่ก็หาไม่เจอ ขอบคุณครับ
เรื่อง OSS glossary นี่ ปัญหาหลักคือคนดูแลไม่พอกับปริมาณงานครับ ทำให้ดูแลไม่ทั่วถึง เท่าที่ทำกันอยู่ คือเมื่อมีการอภิปรายคำไหน ก็จะไป approve คำนั้นให้ตรงกับที่อภิปรายไว้ ซึ่งวิธีแก้ก็คือ ยกคำขึ้นมาอภิปรายใน mailing list ให้มากที่สุด ได้ข้อสรุปมากเท่าไร ก็ update glossary ได้ครอบคลุมมากเท่านั้น
ในอีกทางหนึ่ง ผมก็เสนอให้พยายามลดปริมาณงาน ด้วยการลบคำที่ไม่จำเป็นออก ซึ่งทั้งระดมกำลัง ทั้งทยอยทำมาเรื่อย ๆ ก็ยังลบได้ไม่เท่าไร เรื่องของเรื่องคือ แนวคิดของคนที่สร้าง glossary คือ เขาใส่รายการคำเข้าไปให้มากที่สุด แล้วคาดหวังว่าจะมีคนช่วยกันแปล ช่วยกัน approve จำนวนมาก จนได้ glossary ที่สมบูรณ์ ซึ่งมันขัดกับสภาพการณ์จริง ในเมื่อทุกคำต้องมาจากการอภิปรายตกลงกัน
ทางที่จะแก้ได้ก็คือ แปลกันให้มากขึ้น อภิปรายกันให้มากขึ้น (ใน mailing list) เพื่อให้พัฒนา glossary ให้ได้มากที่สุด และหากจะนัดกันล้างป่าช้าสักหลายครั้ง ก็คงช่วยได้เหมือนกัน (ผมเคยเสนอเป็นหัวข้อใน codefest แต่สุดท้ายก็ตกไป)
จริงๆแล้วนอกจากโปรแกรมแล้ว การแปล Document ก็เป็นสิ่งที่ต้องสนับสนุนเป็นอันดับสองครับ
onedd.net
ไฟล์ .po นี่ใช้ utf-8 รึเปล่าครับ
ใช้ครับ
ขอแก้นิดหนึ่งครับ การทำให้รองรับทุกภาษาพร้อมกัน "โดยไม่ต้องติดตั้งอะไรเพิ่มเติม" น่าจะเรียกว่า m17n (multilingualization) ครับ ส่วน i18n นั้น คู่กับ l10n โดย i18n เป็นการเตรียมโครงสร้างพื้นฐานสำหรับการรองรับนานาภาษา ซึ่งจะเติมเต็มด้วย l10n โดยการติดตั้ง l10n resource ต่าง ๆ เข้าไป ทำให้ซอฟต์แวร์นั้น ๆ สนับสนุนภาษาที่ต้องการในทันที