ปรับแต่งโลแคลใน Debian

อัดรูปดิจิตอล ทำสมุดภาพของคุณเอง
รอรับได้. ท่องเที่ยว แต่งงาน ฯลฯ

www.tanabutr.co.th/photobook


โลแคล

ในระบบที่ผมลงเรียบร้อยแล้วไม่มีโลแคลภาษาไทย.

# locale -a
C
POSIX
en_US
en_US.iso88591

ใน Debian จะมีคำสั่ง locale-gen สร้างโลแคลต่างๆตามที่ระบุในไฟล์ /etc/locale.gen. แต่เพื่อความแน่นอนจะใช้คำสั่ง dpkg-reconfigure ในการสร้างโลแคลภาษาไทยแทน (การสร้างโลแคลจริงๆจะใช้คำสั่ง localedef).

# dpkg-reconfigure locales

แล้วจะมีหน้าจอแสดงโลแคลที่ต้องการสร้างสำหรับระบบให้เลือก.

ลองสั่งคำสั่ง locale -a ใหม่ก็จะเห็น th_TH, th_TH.tis620, th_TH.utf8 และ thai ปรากฏครับ. อธิบายหน่อยแล้วกันว่า locale คือข้อมูลตัวแปรที่เกี่ยวกับภาษา. th แสดงถึงภาษาที่ใช้ว่าเป็นภาษาไทย. TH แสดงถึงประเทศที่ใช้ภาษา. ดังนั้น th_TH ก็หมายถึงภาษาไทยที่ใช้ในประเทศไทย, คงไม่มีประเทศอื่นที่ไหนที่ใช้ภาษาไทยอีกหรอก. อย่างภาษาอังกฤษนี่ที่ประเทศอังกฤษก็ใช้ภาษาอังกฤษ, ที่อเมริกาก็ใช้ภาษาอังกฤษ. คือภาษาเดียวกันยังมีความแตกต่างตามประเทศที่ใช้ด้วย. โลแคลภาษาอังกฤษที่ใช้ในสหราชอณาจักรก็จะเป็น en_GB, โลเคลภาษาอังกฤษที่ใช้ในอเมริกาก็จะเป็น en_US.

ข้อมูลส่วนสุดท้ายคือการลงรหัส (encoding) ของภาษา. ในภาษาไทยมีการลงรหัสใหญ่สองแบบคือแบบ 8 บิตกับยูนิโค้ด. แบบ 8 บิตนี่ก็ยังมีสองแบบคือ TIS-620 และ ISO-8859-11. ไม่เคยดูมาตรฐาน ISO-8859-11 เพราะเขาขาย. แต่คิดว่าเหมือนกับ TIS-620 ทุกประการ. ส่วน UTF-8 เป็นการลงรหัสอักขระของยูนิโค้ด. ตัวอย่างเช่นอักขระ "ก" ถ้าการลงรหัสเป็นแบบ TIS-620 หรือ ISO-8859-11 ก็จะมีค่าเป็น 0xA1. ส่วน UTF-8 จะมีค่าเป็น 0xE0 0xB8 0x81 กลายเป็นข้อมูลแบบ 3 ไบต์ไปแต่มีข้อดีที่ว่า ASCII ไม่เปลี่ยนแปลงและลงรหัสได้หลายภาษา.

อยากดูด้วยตัวเองก็ลองสั่งคำสั่ง

$ LANG=th_TH echo -n ก | iconv -f tis620 -t utf8 | LANG=C less

th_TH และ thai เป็นชื่อสั้นๆ (alias) ของ th_TH.TIS-620 ซึ่งเขียนไว้ในไฟล์ /usr/lib/X11/locale/locale.alias หรือ /usr/share/locale/locale.alias.

แล้วโลแคลมันดีตรงไหน? โปรแกรมต่างๆจะรับรู้ตัวแปรสภาพแวดล้อมต่างๆและตัวแปรที่เกี่ยวกับโลแคลได้แก่ LANG, LC_ALL, LC_CTYPE, LC_COLLATE, ฯลฯ. ถ้าโปรแกรมรู้ว่าค่าตัวแปรสภาพแวดล้อมเหล่านี้เป็นภาษาไทยก็จะทำอะไรๆที่เกี่ยวข้องกับภาษาให้เช่น แสดงเมนูเป็นภาษาไทย, แสดงวันที่ปีแบบไทยๆเป็นต้น. อ่าน man locale และ man localedef ต่อเองแล้วกันครับ.

$ export LANG=th_TH
$ date 
พ. 30 มี.ค. 2548 00:58:57 JST
$ cal
     มีนาคม 2005
อา จ. อ. พ. พฤ ศ. ส.
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
$ LANG=C cal
     March 2005
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

โลแคลพิเศษได้แก่ C กับ POSIX, มีความหมายนัยๆคือภาษาอังกฤษใช้กับคอมพิวเตอร์. เอาเท่านี้ก่อนแล้วกัน.

หมายเหตุ:

แก้คำว่า "โลเคล" ให้เป็น "โลแคล" ตามคำแนะนำของคุณเทพ.

Comments: blogger