Ubuntu 6.06 Dapper กับรหัสภาษาไทย TIS-620
จากเหตุร้องขอของ อ.wd(ไทยลินุกส์คาเฟ่) เกี่ยวกับวิธีการติดตั้งรหัส TIS-620 ให้กับ Ubuntu 6.06 Dapper ลำบากเลย ^^' เผอิญตัวเองทดสอบเป็นลินุกส์ตระกูล Dapper คือ Kubuntu กับ Mepis เลยไม่ค่อยชัวร์และแน่ใจเท่าไหร่ เนื่องจากไม่เคยทดลองกับ Ubuntu (ตัวเป็นๆ) เมื่อวานนี้จึงได้ทำการดาวน์โหลด ISO ไพล์มาเบิร์นแผ่นเพื่อใช้ในการติดตั้ง มีภาษาให้เลือกติดตั้ง (มีภาษาไทยด้วยนะ) มั่วอยู่นานเหมือนกันเนื่องจากการจัดการ locale ของ Ubuntu มีวิธีการแตกต่างจากที่รู้มา เมื่อติดตั้งเรียบร้อย สมมติว่าผู้ใช้งานเลือกภาษาไทยขณะติดตั้ง Ubuntu Dapper จะกำหนดรหัสภาษาไทย th_TH.utf8(Unicode) ให้อัตโนมัติ ...ซึ่งระบบลินุกส์เดสก์ทอปส่วนมากมักจะกำหนดรหัสภาษาท้องถิ่น(locale) ผ่านแฟ้ม /etc/environment ลองดูค่าของ Ubuntu
~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games"
LANG="th_TH.UTF-8"
LANGUAGE="th_TH:th"
และส่งผลให้ค่าต่างๆของระบบรหัสภาษาท้องถิ่น(locale) เป็นไปตามข้อกำหนดของ environment เช็คดูค่าต่างๆจากคำสั่ง locale
~$ locale
LANG=th_TH.UTF-8
LC_CTYPE="th_TH.UTF-8"
LC_NUMERIC="th_TH.UTF-8"
LC_TIME="th_TH.UTF-8"
LC_COLLATE="th_TH.UTF-8"
LC_MONETARY="th_TH.UTF-8"
LC_MESSAGES="th_TH.UTF-8"
LC_PAPER="th_TH.UTF-8"
LC_NAME="th_TH.UTF-8"
LC_ADDRESS="th_TH.UTF-8"
LC_TELEPHONE="th_TH.UTF-8"
LC_MEASUREMENT="th_TH.UTF-8"
LC_IDENTIFICATION="th_TH.UTF-8"
LC_ALL=
การตรวจสอบรหัสภาษาท้องถิ่นทั้งหมดที่สามารถเลือกใช้ได้ในระบบ ด้วยคำสั่ง locale -a
~$locale -a
C
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX
th_TH.utf8
สังเกตุที่ th_TH. ทั้งหมด ณ ขณะนี้แสดงว่าระบบมีภาษาไทย th_TH.utf8 (Unicode) ให้เลือกรหัสเดียวเท่านั้น ไม่แน่ใจว่าหากเราอัพเกรดจาก Breezy มาเป็น Dapper จะคงค้างรหัส TIS-620 หรือไม่ แต่ถ้าเป็นการติดตั้ง Dapper ใหม่ จะต้องเป็นตามตัวอย่างที่แสดงไว้แน่นอน ซึ่งแตกต่างจากก่อนหน้านี้ในเวอร์ชั่น Breezy มีรหัสภาษาไทยมาให้ 2 รหัส คือ utf8 และ tis620 ผมก็อดประหลาดใจไม่ได้ว่า ถึงเวลาแล้วหรือที่เราจะใช้รหัส Unicode ในการใช้งานจริง โดยไม่ก่อให้เกิดปัญหาในการใช้งานจริง ซึ่งแน่ๆ ผมคนหนึ่งล่ะที่ยังไม่พร้อมใช้รหัส unicode เนื่องจากติดปัญหาเช่น ปัญหากับไฟล์ mp3(แฮ่ะๆ แผ่นก๊อป) หรือ แฟ้มข้อมูลจากระบบวินโดว์ เป็นต้น ...
แต่ว่า Ubuntu 6.06 Dapper รีลิสออกมาเกือบจะเดือนแล้ว ผมก็ยังไม่เห็นมีใครบ่นถึงปัญหานี้นะ (Unicode) แอบเมียงมองตามเว็บบอร์ดลินุกส์ต่างๆ เขาก็ดูปกติสบายดีนิ (เอ๊ะ! สังสัยเราจะมีปัญหาอยู่คนเดียวล่ะมั้ง) ...
ก่อนหน้านี้(เบต้าเวอร์ชั่น) ผมเคยลองคำสั่ง dpkg-reconfigure locales จะได้ผลลัพธ์แค่การสร้างรหัสภาษาจากระบบเท่านั้น ไม่มีตัวเลือกให้กำหนด หาข้อมูลจากเว็บ Ubuntu ก็แนะนำให้ใช้คำสั่งนี้ครับ dpkg-reconfigure localeconf (ต้องติดตั้งแพ็คเก็ต localeconf ก่อน) ภายในโปรแกรมติดตั้งจะมีตัวเลือกภาษาไทยแบบ TIS-620 สามารถกำหนดค่าได้ แต่ผลลัพธ์จะไม่ได้ TIS ตามที่ต้องการ เสมือนเป็นการกำหนดรหัสโดยที่ไม่ระบบข้อมูลภาษารองรับ และนอกจากจะไม่แสดงภาษาไทยที่ถูกต้องต้องแล้ว ยังก่อให้เกิดผลข้างเคียงกับระบบ เช่น จะมีการแสดงข้อความเตือนในหลายๆส่วนของระบบ อันบ่งบอกถึงความไม่ถูกต้อง
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "th_TH:th",
LC_ALL = (unset),
LANG = "th_TH"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
ปัญหาดังกล่าว สัญนิษฐาน(เดา)ได้ว่า Ubuntu Dapper คงจะเน้น Unicode เป็นรหัสมาตราฐานสากล จึงไม่ได้ทำการสร้างรหัสภาษาไทย TIS-620 มาอยู่ในระบบตั้งแต่แรก ดังนั้นหากเราต้องทำการใช้รหัสตัวนี้จริงๆ คงต้องติดตั้งรหัสภาษาเอาเอง ตามปกติ th_TH(tis620) จะถูกรวมมากับ glibc ซึ่งในบางดิสโตรได้สร้างรหัสตัวนี้ให้มาให้เลย เช่น RedHat และ Mandrake แต่ดิสโตรอื่นเช่น Debian อาจจะต้องทำการติดตั้งเองในภายหลัง วิธีการ โดยกำหนดค่าเริ่มต้นในแฟ้ม /etc/locale.gen และจะถูกสร้างรหัสใช้ด้วยคำสั่ง locale-gen แต่ลึกลงไปในรายละเอียด จริงๆแล้วรหัสภาษาท้องถิ่นต่างๆ จะถูกสร้างด้วยคำสั่ง localedef ดังนั้นหากต้องการสร้างรหัสภาษาไทย tis620 ให้ใช้คำสั่งดังนี้
localedef -f TIS-620 -i th_TH th_TH
ผมได้พื้นฐานเกี่ยวกับ Locale จาก ที่นี่ และ ที่นี่ ครับ! หลังจากใช้คำสั่ง localedef ดังกล่าวแล้ว ลองตรวจสอบความถูกต้องด้วยคำสั่ง locale -a สั่งเกตุว่าตอนนี้รหัส th_TH (ถ้าเป็นตามตัวอย่างข้างล่างถือว่าถูกต้อง)
~$ locale -a
...
...
th_TH
th_TH.tis620
th_TH.utf8
จากนั้นทำการกำหนดค่า locale ต่างๆและตัวแปรในระบบ ด้วยการใช้คำสั่ง sudo dpkg-reconfigure localeconf (ต้องติดตั้งแพ็คเก็ต localeconf ก่อน) ซึ่งโปรแกรมจะไปแก้ไขแฟ้มดังนี้คือ /etc/environment และ /etc/locale.gen หรือเราจะแก้ไขด้วยมือก็ได้ครับ ไม่แตกต่าง
~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games"
#LANG="th_TH.UTF-8"
LANGUAGE="th_TH:th"
LC_ALL ="th_TH"
### BEGIN DEBCONF SECTION FOR localeconf
# Do not edit within this region if you want your changes to be preserved
# by debconf. Instead, make changes before the "### BEGIN DEBCONF SECTION
# FOR localeconf" line, and/or after the "### END DEBCONF SECTION FOR
# localeconf" line.
LANG=th_TH
### END DEBCONF SECTION FOR localeconf
~$ cat /etc/locale.gen
### BEGIN DEBCONF SECTION FOR localeconf
# Do not edit within this region if you want your changes to be preserved
# by debconf. Instead, make changes before the "### BEGIN DEBCONF SECTION
# FOR localeconf" line, and/or after the "### END DEBCONF SECTION FOR
# localeconf" line.
th_TH TIS-620
### END DEBCONF SECTION FOR localeconf
จากนั้น restart เครื่องใหม่ จะพบการเปลี่ยนแปลงที่เมนูตัวเลือก > เปลี่ยนภาษา จะมีภาษาไทยให้ 2 ตัวคือ ไทย(UTF-8) กับ ไทย ซึ่งตัวหลังนี่คือ TIS-620 ครับ หลังจากล็อกอินผ่านเข้าระบบแล้ว ใช้คำสั่ง locale ตรวจสอบความสมบูรณ์อีกครั้ง (ถ้าเป็นตามตัวอย่างข้างล่างถือว่าถูกต้อง)
~$ locale
LANG=th_TH
LC_CTYPE="th_TH"
LC_NUMERIC="th_TH"
LC_TIME="th_TH"
LC_COLLATE="th_TH"
LC_MONETARY="th_TH"
LC_MESSAGES="th_TH"
LC_PAPER="th_TH"
LC_NAME="th_TH"
LC_ADDRESS="th_TH"
LC_TELEPHONE="th_TH"
LC_MEASUREMENT="th_TH"
LC_IDENTIFICATION="th_TH"
LC_ALL=th_TH


_/|\_
ตามมาเชียร์ครับ :)