Theppitak's blog

My personal blog.

06 ตุลาคม 2551

Using Thai through English Locale

ผลพวงจาก LP #273856 เกี่ยวกับปัญหาการป้อนภาษาไทย ทำให้ผมได้พบความจริงอย่างหนึ่งที่ไม่ได้นึกถึงมานาน และเป็นคำตอบให้กับอะไรหลาย ๆ อย่าง

นั่นคือ ยังมีผู้ใช้จำนวนมากที่ใช้ภาษาไทยบนโลแคลภาษาอังกฤษ!

เรื่องนี้เป็นเรื่องที่ผมลืมมานานแล้ว เนื่องจากได้ปรับตัวให้เข้ากับ UI ภาษาไทยของ GNOME มาไม่ต่ำกว่า 8 ปี นับตั้งแต่เริ่มเข้าร่วมทีมแปลในช่วง GNOME 2.6 หลังจากรับฟังเสียงบ่นจากผู้ว่าจ้างที่ต้องการคำแปลภาษาไทยที่มีคุณภาพกว่าตอนนั้น โดยในช่วงแรก ๆ ผมเน้นปรับตัวสะกดและการใช้คำ จนต่อมาก็ทำส่วนอื่นมากขึ้นเรื่อย ๆ โดยใช้แต่ UI ภาษาไทยมาตลอด เพื่อให้ตัวเองมีโอกาสพบความผิดพลาดและแก้ไขให้มากที่สุด

เรื่องภาษาของ UI นี้ เป็นเรื่องนานาจิตตัง หลายคนอาจจะชอบ UI ภาษาอังกฤษ เพราะยังติดภาพลบของคำแปลภาษาไทยในซอฟต์แวร์หลาย ๆ ตัว แต่ผลข้างเคียงที่ผมไม่เคยนึกถึง คือมันทำให้ผมไม่เข้าใจปัญหาหลาย ๆ เรื่องที่ได้พบเห็นในเว็บบอร์ดต่าง ๆ โดยเฉพาะเรื่องการป้อนภาษาไทย

ผมไม่เข้าใจ เพราะผมทดสอบยังไงก็ได้ผลต่างจากเขา ผมใช้ input method ภาษาไทยที่มีทั้งการตรวจสอบและแก้ลำดับการพิมพ์ หากจะมีอาการผิดปกติบางอย่าง ผมก็สามารถแก้ไขและทดสอบแล้วได้ผล แต่ผมเพิ่งจะมาถึงบางอ้อด้วยประโยคนี้ใน ความเห็นหนึ่ง:

but If I switch session to thai everything work fine. ???

ผมกระจ่างเลย ว่าที่ผ่านมาเราพูดถึงปัญหาคนละปัญหากัน ผมลืมไปเสียสนิทว่ายังมีอีกหลายคนที่ยังพยายามใช้ภาษาไทยบนโลแคลภาษาอังกฤษ

จากนั้น ความกระจ่างก็ตามมาอีกเป็นระลอก ๆ

ผมเข้าใจแล้ว ว่าทำไมจึงยังพบเห็นการป้อนภาษาไทยผิดลำดับตามเว็บต่าง ๆ ของชุมชนผู้ใช้ลินุกซ์ โดย pango จะวาดลำดับที่ผิดเหล่านั้นให้เห็นอย่างชัดเจน เช่น วรรณยุกต์มาก่อนสระบน หรือมีสระอิ สระอี อยู่ต้นบรรทัด ฯลฯ ทั้ง ๆ ที่ลำดับเหล่านี้ควรถูก XIM กรองออกหมดแล้ว ผมคิดไปอีกแบบ ว่าผู้ใช้อาจจะมาจาก OS อื่นที่ยังรองรับภาษาไทยไม่เต็มที่ (วินโดวส์ไม่น่าจะใช่ ส่วน MacOSX ผมไม่แน่ใจ เพราะไม่เคยใช้) แต่ผมไม่เคยนึกถึงกรณีที่จะมาจากผู้ใช้ลินุกซ์ที่ใช้โลแคลภาษาอังกฤษเลย

และครั้งนี้ก็เช่นกัน เมื่อได้ยินเสียงบ่นว่าการป้อนภาษาไทยมีปัญหา ผมก็นึกถึงแต่ ปัญหาในโลแคลไทยของ Xlib ซึ่งหากแก้ไขตามแพตช์แล้ว ก็ควรจะใช้การได้ แต่กลับไม่ใช่

การเข้าระบบด้วยวาระภาษาอังกฤษนั้น ไม่มีอะไรรับประกันได้เลย ว่าผู้ใช้จะสามารถป้อนภาษาไทยได้ กลไกต่าง ๆ ไม่ว่าจะของเดสก์ท็อปหรือของดิสโทรที่ได้เตรียมไว้ให้ผู้ใช้ภาษาไทย ต่างอาศัยการเข้าระบบด้วยวาระภาษาไทยทั้งสิ้น!

เริ่มตั้งแต่:

  • XIM ของ X Window จะเปิดใช้การป้อนภาษาไทยก็ต่อเมื่อ LC_CTYPE จะต้องเป็นไทย (th_TH.UTF-8 หรือ th_TH.TIS-620 แล้วแต่กรณี) ซึ่งสามารถกำหนดได้หลายวิธี เช่น:

    • LANG=th_TH.UTF-8 ซึ่งจะเป็นค่านี้เมื่อเข้าระบบด้วยวาระภาษาไทย และจะใช้ธรรมเนียมไทยทั้งหมด ทั้งรูปแบบวันเวลา การเรียงลำดับคำ ข้อความใน UI และการป้อนข้อความ
    • LANG=th_TH.UTF-8, LC_MESSAGES=en_US.UTF-8 คือใช้ธรรมเนียมไทยทั้งหมด ยกเว้นข้อความใน UI เป็นภาษาอังกฤษ เหมาะสำหรับผู้ใช้ภาษาไทยที่ต้องการใช้ UI ภาษาอังกฤษ
    • LANG=en_US.UTF-8, LC_CTYPE=th_TH.UTF-8 คือใช้ธรรมเนียมภาษาอังกฤษหมด ทั้งวันเวลา หน่วยเงินตราและอื่น ๆ การเรียงลำดับคำภาษาไทยจะไม่เรียงตามพจนานุกรมไทย ข้อความภาษาไทยใน UI ก็ไม่ขึ้น เหมาะสำหรับผู้ที่ต้องการแค่ป้อนภาษาไทยได้เท่านั้น โดยไม่แตะต้องอย่างอื่น

    มีหลายวิธีที่จะกำหนดค่าตัวแปรเหล่านี้ เช่น สำหรับทั้งระบบก็ที่ /etc/environment (สำหรับ Debian/Ubuntu) แต่ถ้ากำหนดเฉพาะส่วนบุคคลก็โดย export ตัวแปรที่ ~/.bashrc

    แต่อย่าลืมว่า การกำหนดค่านี้ จะมีผลกับการป้อนข้อความก็ต่อเมื่อ im-switch เลือกใช้ XIM เท่านั้น ดูข้อถัดไปประกอบ

  • im-switch ของ Debian/Ubuntu ซึ่งจะใช้กำหนดวิธีป้อนข้อความปริยายเมื่อเปิดโปรแกรมต่าง ๆ ในวาระที่เข้าระบบ ก็จะอาศัยโลแคลของวาระเป็นเกณฑ์เช่นกัน ถ้าเป็นภาษาอังกฤษ ก็จะใช้วิธีป้อนข้อความสำหรับภาษาอังกฤษ ถ้าเป็นโลแคลไทย ก็จะใช้วิธีป้อนสำหรับภาษาไทย ดังนั้น สำหรับการติดตั้งโดยใช้ภาษาอังกฤษโดยไม่มีการปรับแต่งอะไร คุณก็ยังคงไม่ได้ใช้การป้อนข้อความที่ออกแบบมาสำหรับภาษาไทยอยู่ดี ถ้าคุณเข้าระบบเป็นภาษาอังกฤษ

    ถ้าคุณต้องการเข้าระบบด้วยวาระภาษาอังกฤษ แต่ต้องการป้อนภาษาไทยแบบมีการกรอง/แก้ลำดับ คุณก็สามารถทำได้โดยกำหนด im-switch:

    • เรียกดู im-switch ที่มีทั้งหมด:

      $ im-switch -l
      Your input method setup under en_US locale as below.
      =======================================================
      No private "/home/thep/.xinput.d/en_US or /home/thep/.x
      input.d/all_ALL" is defined.
      =======================================================
      The system wide default is pointed by "/etc/alternative
      s/xinput-all_ALL" .
      xinput-all_ALL - status is auto.
       link currently points to default
      default-xim - priority 0
      none - priority 0
      default - priority 10
      scim - priority 0
      scim-immodule - priority 0
      Current `best' version is default.
      =======================================================
      The available input method configuration files are:
      /usr/bin/find: `/home/thep/.xinput.d': No such file or 
      directory
      default default-xim none scim scim-immodule th-gtk-im-l
      ibthai th-xim 
      =======================================================
      

      จะเห็นรายละเอียด บอกว่าไม่มีการกำหนด im-switch ไว้ และระบบพยายามหาค่าปริยาย ซึ่งค่าที่ดีที่สุดในกรณีนี้ซึ่งใช้โลแคล en_US คือ "default" จากนั้นก็ให้รายชื่อ config ที่มีทั้งหมดไว้ท้ายสุด

    • กำหนด im-switch config ที่ต้องการ:

      • ถ้าจะใช้ gtk-im-libthai:
        $ im-switch -s th-gtk-im-libthai
        
      • ถ้าจะใช้ XIM:
        $ im-switch -s th-xim
        
      • ถ้าจะใช้ SCIM:
        $ im-switch -s scim-immodule
        

      แต่เข้าระบบด้วยวาระภาษาไทย ค่าที่ดีที่สุดจะกลายเป็น "th-gtk-im-libthai" โดยอัตโนมัติ หรือถ้าไม่ได้ติดตั้ง gtk-im-libthai ก็จะเป็น "th-xim" แทนอยู่แล้ว ไม่ต้องกำหนดอะไรเพิ่ม

ทั้งหมดนี้ เป็นสิ่งที่ต้องกำหนดเพิ่ม ถ้าผู้ใช้พยายามจะหลีกเลี่ยง UI ภาษาไทย แต่ยังต้องการใช้ภาษาไทยในโปรแกรมอยู่ ซึ่งผมคิดว่าวิธีที่ง่ายที่สุดคือ เข้าระบบด้วยวาระภาษาไทย แต่กำหนด LC_MESSAGES เป็น en_US.UTF-8

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

ป้ายกำกับ: , , , ,

10 ความเห็น:

  • 6 ตุลาคม 2551 เวลา 13:00 , Blogger veer แถลง…

    บางทีผมก็เลือก locale ลาว ด้วย -_-! ... พยายามจะพิมพ์ภาษาจีนด้วย :-P

     
  • 6 ตุลาคม 2551 เวลา 13:09 , Blogger bact' แถลง…

    สำหรับคนที่อยากจะใช้ th-gtk-im-libthai แต่ยังไม่ได้ลง ลงได้ด้วยคำสั่งนี้ (Debian/Ubuntu):

    sudo apt-get install gtk-im-libthai

     
  • 6 ตุลาคม 2551 เวลา 13:19 , Blogger Thep แถลง…

    veer, อย่างคุณนี่ขั้น advance แล้ว ยังไงก็อยู่นอกขอบเขตของค่า default :)

     
  • 7 ตุลาคม 2551 เวลา 00:24 , Anonymous ไม่ระบุชื่อ แถลง…

    นี่เป็นสาเหตุให้บริษัทระดับกลางถึงใหญ่ ต้องมี Tester ต่างหากจาก Developer ครับ เพราะ Tester เค้าจะคิดในแง่มุมที่เรา (Developer) ไม่เคยคิดมาก่อน หรืออีกนัยหนึ่งว่าเค้าคิดได้ใกล้เคียง User มากกว่านั่นเอง (แม้บางครั้งก็อาจจะทำให้ Developer รำคาญ ประมาณว่า คิดลึกอะไรกันนักหนา แต่ปรากฎว่า case เหล่านั้นมีคนใช้อยู่จริงๆ)

     
  • 7 ตุลาคม 2551 เวลา 14:04 , Blogger Thep แถลง…

    cwt, คำถามต่อไปคือ ถ้าบริษัทฯ ต้องมี tester แล้ว FOSS ต้องมีอะไร?..

     
  • 7 ตุลาคม 2551 เวลา 14:07 , Blogger Thep แถลง…

    หมายเหตุ: bug นี้ถูกกำหนด priority เป็น low เรียบร้อย คาดว่าสาเหตุคือเขาถือเป็น user error มากกว่า software error โดยตรง

     
  • 8 ตุลาคม 2551 เวลา 11:52 , Blogger cwt แถลง…

    ในกรณีของ FOSS คิดว่าคงจะยากอยู่เหมือนกันครับ เท่าที่ผมเห็นในบริษัทที่ผมทำงานอยู่ tester งานหนักว่า dev เสียอีก รวมถึงต้องมีระเบียบวิธีการทำงานที่เคร่งครัดด้วย dev แต่ละ project อาจจะมีวิธีการทำงานต่างๆ กันไป แต่ tester ทุกๆ project ต่างใช้วิธีเดียวกันหมด ใช้เครื่องมือเดียวกัน มีการ update (วิธีการ test) กันตลอด ดูคล้ายๆ กับเป็นสมาคม หรือสมาพันธ์ tester ดังนั้นในรูปแบบของ FOSS คงต้องมาช่วยกันคิดว่าจะต้องทำอย่างไรครับ

    dev เปลี่ยนไปได้หลายคน แต่วิธี test ยังต้องเหมือนเดิม

     
  • 16 ตุลาคม 2551 เวลา 13:10 , Blogger deaw แถลง…

    กระจ่างเลยครับ

     
  • 14 เมษายน 2552 เวลา 12:48 , Blogger samphan แถลง…

    ไม่มีวิธี login แบบเลือก system locale เป็นไทย แต่ UI เป็นอังกฤษเหรอ เหมือนที่ config ง่ายๆ ใน OpenOffice.org มี GUI ให้เลือกง่ายๆ ไหม?

     
  • 14 เมษายน 2552 เวลา 13:00 , Blogger Thep แถลง…

    Samphan, อยู่ในแนวคิดที่คิดไว้เหมือนกันครับ รอให้เสร็จงานยุ่ง ๆ เกี่ยวกับ libthai/datrie/swath เสียก่อน แล้วจะมา blog ถึงให้เป็นเรื่องเป็นราวครับ

     

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem