ปรับแต่งโลแคลใน 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, มีความหมายนัยๆคือภาษาอังกฤษใช้กับคอมพิวเตอร์. เอาเท่านี้ก่อนแล้วกัน.
หมายเหตุ:
แก้คำว่า "โลเคล" ให้เป็น "โลแคล" ตามคำแนะนำของคุณเทพ.