LINUX TIP & TRICK

บันทึกช่วยจำประสบการณ์และเรื่องราวต่างๆ ในการใช้งานลินุกส์เดสก์ทอป ...

วันพุธ, มิถุนายน 21, 2006

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

15 Comments:

    • At 21/6/06 21:34, Blogger wd said…

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

       
    • At 22/6/06 20:45, Anonymous mr.eak said…

      ได้ประโยชน์มากครับ :)

       
    • At 30/6/06 10:41, Blogger poonlap said…

      ใช้คำสั่ง locale-gen ที่มีอยู่ใน ubuntu จะสะดวกกว่า localedef นะครับ

      sudo locale-gen th_TH

      มันจะไปเรียน localedef อีกทีแล้วสร้าง locale สำหรับ th_TH.TIS-620 ให้ครับ

       
    • At 30/6/06 13:22, Blogger Mr.Somjate said…

      คุณพูลลาภ มาเยือน และให้ความรู้เพิ่มด้วย

      ขอบคุณครับ ... ToT (ซึ้ง) ...

       
    • At 4/8/06 20:58, Anonymous ไม่ระบุชื่อ said…

      ขอบคุณอาจารย์ทุกท่าน อาจารย์ครับ เวลาเซ็ต ระบบเป็น UTF8 แล้วมันอ่าน MP3 ชื่อไทย ออกบ้างไม่ออกบ้าง จะแก้ไข ตรงจุดไหนอย่างไรครับ แล้วผมมีปัญหากับ Amarok 1.4>> มากเลย อ่านเพลงไทยไม่ออกเลย ช่วยแนะนำที

      t-x@thailinuxcafe
      nabee@lumpoo.com

       
    • At 5/8/06 15:18, Blogger Mr.Somjate said…

      ผมก็เห็นคุณ T-X โพสต์รูปว่าใช้ Amarok กับภาษาไทยได้ ผมยังโพสต์้ถามไปว่าแก้ไขยังไงเลยนิ ...

      เรื่อง ID3 Tag ผมแก้ปัญหาด้วย EasyTAG วิธีใช้เขียนไว้ในบล็อกล่าสุด ... ^^

       
    • At 6/8/06 19:10, Anonymous ไม่ระบุชื่อ said…

      อ่อ ครับ อาจารย์สมเจตน์ ผมโพส สะมั่วไปหมด ก็เลย งงๆ แต่ช่วงหลังๆไม่ได้ใช้ Ubuntu เลยครับ ไปตามเก็บตก Distro แปลกๆ เช่น Linux-XP QiLinux Blackpanther Freespire aLinux และ อีกเยอะแยะไปหมด

      คิดแล้วน่าน้อยใจนะครับ ต่างประเทศเค้ามี Linux ดีๆใช้กันอวดอ้างแหล่งกำเนิดเป็นของประเทศเค้า
      ไทยแลนด์ ของเราผมรอ LinuxTLE ตัวใหม่จนจะห้วหงอกแล้ว ไม่รู้มีโอกาสจะคลอดไหมเนี่ย ใช้ Ubuntu Based รึอะไรกันแน่ ...งง???

      t-x@thailinuxcafe
      nabee@lumpoo.com

       
    • At 8/8/06 10:43, Blogger Mr.Somjate said…

      แนะ! มาเรียกเราอาจารย์ เดี๋ยวโดน ...

      โฮ้ย เซ็ตภาษาไทยเองได้แล้ว ไม่ต้องไปรอ TLE เขาแล้วมั้งครั้บ อย่างคุณ T-X เขาเรียกว่าต้องมองข้ามช็อตไปแล้วนิ ...

      หากสมมติว่ามี TLE ผมอยากให้เป็นแบบ PCLOS ไปเลย มือใหม่ๆ จะได้ไม่ต้องมางงๆ ติดตั้งโน่นนี่ให้วุ่นวาย เรื่องลิขสิทธิ์ผมว่าไม่น่ามีปัญหา เห็นดิสโตรอื่นๆ เขาก็ทำแบบนี่ในหลายๆตัว ทำไมเขาถึงทำได้ ...

       
    • At 29/8/06 11:04, Blogger rerng007 said…

      สวัสดีครับ ตามมาอ่านครับ

       
    • At 5/9/06 20:55, Anonymous อานนท์ said…

      dpkg-reconfigures locales <-- มัน ก็ ไป เรียก locale-gen และ แก้ /etc/environment ให้ ไม่ใช่ เหรอ.
      ผม ลอง ใน ubuntu 4.10 มัน ก็ ทำ ให้ นะ.

       
    • At 5/9/06 21:02, Anonymous อานนท์ said…

      มี ข้อสงสัย อย่าง นึง ว่า ทำไม ใช้ locale "thai" กับ "th_TH.TIS-620" มัน ดัน แสดง ผล ต่าง กัน,
      รายละเอียด ตาม link นี้ ครับ,
      http://th.lug.wikia.com/wiki/%E0%B8%9E%E0%B8%A4%E0%B8%95%E0%B8%B4%E0%B8%81%E0%B8%A3%E0%B8%A3%E0%B8%A1%E0%B9%81%E0%B8%9B%E0%B8%A5%E0%B8%81%E0%B9%86_%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%81%E0%B8%AA%E0%B8%94%E0%B8%87%E0%B8%9C%E0%B8%A5_thai_locale_%E0%B9%83%E0%B8%99_gnome-terminal

       
    • At 11/9/06 20:38, Blogger Mr.Somjate said…

      dpkg-reconfigures locales กับ base debian ดิสโตรอื่นๆ ก็สามารถทำได้ปกติ แต่พอมาเป็น Ubuntu 6.06 รู้สึกเหมือนจะไม่เรียก locale-gen แล้ว ซึ่งจะต้องเลือกรหัสภาษาหลักด้วยคำสั่ง dpkg-reconfigures localeconf แทน

      การติดตั้ง Ubuntu 6.06 หากเลือกภาษาเป็นไทย เมื่อติดตั้งเสร็จระบบจะกำหนดรหัส utf8 (unicode) ให้เท่านั้น หากเข้าไปดูในระบบรหัสภาษา จะสังเกตุว่า Ubuntu 6.06 จะไม่มี charmap tis620 (ตรวจสอบด้วยคำสั่ง locale -a) หากต้องการรัหสนี้ จะต้องใช้คำสั่ง localedef เพื่อกำหนดรหัส tis620 ให้ระบบได้รับรู้ก่อน เรื่องก็เป็นด้วยประการฉะนี้ ...

      ส่วนข้อ 2 ของคุณอานนท์ ผมไม่ทราบเหมือนกันครับ เรื่องรหัสภาษามีความรู้แค่หางอึ่ง คงต้องถามเซียนทาง tlwg เช่น คุณเทพ คุณพูนลาภ แล้วครับ ...

       
    • At 6/3/07 19:20, Anonymous ไม่ระบุชื่อ said…

    • At 12/2/08 00:07, Anonymous ไม่ระบุชื่อ said…

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

       
    • At 19/2/09 11:17, Anonymous ไม่ระบุชื่อ said…

      ขอบคุณมากค่ะ ดิฉันสามารถแก้ปัญหาได้แล้ว ดิฉันลองกับ ubuntu 8.10

       
    • แสดงความคิดเห็น