ย้ายบล็อกไปที่ bact.cc แล้วนะครับ

พ.ร.บ.คอมพิวเตอร์
หยุด ร่างพ.ร.บ.คอมพิวเตอร์
พื้นที่เก็บข้อมูลออนไลน์ ฟรี 2GB จาก Dropbox (sync กับ Windows, Linux, Mac, iPhone, Android ฯลฯ ได้)

2007-10-26

Thai UTF-8 localisation in phpBB

อัพเดท: 2007.11.02 คุณ SuperToy_nc (ผู้ดูแลชุดภาษาไทยของ phpBB ในปัจจุบัน) แจ้งมาว่า ชุดภาษาไทยของ phpBB 2 นั้น มีให้ดาวน์โหลดเป็น UTF-8 อยู่แล้ว ที่เว็บไซต์ phpBB.com
ใครที่จะติดตั้งใหม่ และจะใช้ UTF-8 ก็ไปดาวน์โหลดได้จากเว็บไซต์ phpBB ได้โดยตรงเลย ไม่ต้องแปลงอย่างที่แสดงข้างล่างนะครับ
(ข้างล่างนี้ เป็นกรณีที่ มีชุดภาษาที่เป็น TIS-620 (หรือ encoding อื่น ๆ) ติดตั้งอยู่แล้ว และต้องการจะแปลงของเดิมนี้เป็น UTF-8 — กรณีนี้กรณีเดียวเท่านั้น)
และ phpBB ทั้งรุ่น 2 และ 3 ต่างก็ใช้ UTF-8 ได้ทั้งคู่
ส่วนใครอยากดูวิธีลง phpBB ตั้งแต่ตั้งต้น ก็ไปดูได้ที่หน้าเว็บ http://supertoy.host.sk/howto/phpbb.html (ภาษาไทย, มีภาพประกอบ)
ขอขอบคุณคุณ SuperToy_nc มา ณ ที่นี้ด้วยครับ ที่ช่วยชี้แจงอธิบายและส่งลิงก์มาให้
และขอโทษทุกท่านที่อาจทำให้เข้าใจผิด คิดว่าตัวชุดภาษาไทยของ phpBB มันไม่มีแบบ utf-8 ต้องมาแปลงเองด้วยครับ

ส่วนใครที่ใช้ธีมตระกูล *silver แล้วมีปัญหา ภาษาไทยที่หัวเรื่องหมวดหมู่มันแสดงโย้ ๆ (โดยเฉพาะถ้าดูใน Firefox บนลีนุกซ์)
ให้ไปดูที่โฟลเดอร์ templates/ชื่อธีม แล้วแก้ไฟล์ *.css และไฟล์ *_header.tpl ทั้งหลาย (ซึ่งมี css อยู่ที่หัว)
โดยเอา letter-spacing ออกไปซะ และถ้ามีพวก text-align ที่เป็น justify ก็เอาออกไปด้วย หรือแก้เป็น left
(ที่ตัวอักษรมันโย้ เพราะว่าตัวเบราว์เซอร์มันคำนวณระยะห่างตัวอักษรผิดครับ มันเอาพวกสระบนล่างและวรรณยุกต์ไปคำนวณ spacing ด้วย ก็เลยเป็นอย่างนั้น จริง ๆ ควรจะที่เว็บเบราว์เซอร์ให้มันจัดให้ถูก ๆ แต่ตอนนี้ก็เลี่ยงแบบนี้ไปก่อนได้)

ก่อนแก้ .cattitle letter-spacing = 1px:
phpBB / letter-spacing: 1px

หลังแก้ ลบ letter-spacing ทิ้งไปเลย:
phpBB / no letter-spacing

(ตัวข้อความที่เปลี่ยนไปไม่เกี่ยวกะ css นะ อันนั้นอยู่ในส่วนที่แปลเพิ่มเติม)


[โพสต์ดั้งเดิมเริ่มที่นี่]

ที่ภาควิชารับผิดชอบเป็นศูนย์ประสานงานภาคกลางของงานประกวดซอฟต์แวร์ National Software Contest (NSC)
พี่ที่แล็บจะทำเว็บบอร์ด ด้วย phpBB แต่ติดว่าตัว ชุดภาษาไทย (Thai language pack) [ที่ติดตั้งอยู่เดิม] มันมีปัญหากับรหัสอักขระ utf-8

ผมไม่อยากเปลี่ยนฐานข้อมูลเป็น tis-620 อยากจะใช้ให้ทั้งหมดเป็น utf-8 เลยคิดว่าน่าจะมาแก้ที่ตัว phpBB ที่ตัวชุดภาษา

ชุดภาษาใน phpBB จะติดตั้งอยู่ที่ไดเรกทอรีชื่อ “language” ข้างในก็จะมีไดเรกทอรีย่อยของแต่ละภาษาอยู่ ของภาษาไทยอยู่ใน “lang_thai” ผมก็ทำสำเนาอีกชุดซะ มาเป็น “lang_thai-utf8” กันเหนียว

ที่ต้องทำตอนแรก ก็คือแปลงพวกไฟล์ข้อความ จากรหัส tis-620 ให้เป็น utf-8 ซะก่อน ในชุดภาษามีไฟล์หลัก ๆ อยู่ 4 อัน คือ lang_main.php, lang_admin.php, lang_bbcode.php, lang_faq.php
ส่วนไฟล์สำหรับช่วยการค้นหา search_stopwords.txt และ search_synonyms.txt นั้น เป็นภาษาอังกฤษล้วน ก็ไม่ต้องทำอะไร
(สำหรับไฟล์ในไดเรกทอรี email นั้น จะแปลงหรือไม่แปลงก็ได้ ไม่เกี่ยวกับเว็บ)

iconv -f tis-620 -t utf-8 lang_xxx.php > lang_xxx.php

จากนั้นแก้ $lang['ENCODING'] ในไฟล์ lang_main.php ให้เป็น utf-8 ด้วย:

$lang['ENCODING'] = 'utf-8';

ถึงขั้นนี้ ตัว phpBB ก็จะแสดงภาษาไทยได้แล้ว โดยใช้ utf-8
แต่ยังไม่เสร็จ เพราะตอนโพสต์ข้อมูลมันจะยังเพี้ยนอยู่ ตัวอักษรไทยในหัวข้อมันจะถูกแปลงไปเป็น &#nnnn;
อัพเดท: ลองทดสอบอีกที เอ แค่แก้ตัวชุดภาษาอย่างเดียวมันก็เวิร์กแล้วนี่นา สงสัยก่อนหน้าที่ไม่เวิร์ก (ตัว charset ยังเป็น iso-8859-1) คงเป็นเพราะแคชยังค้างอยู่ ยังไงถ้าใครจะลองทำตาม ก็ลองทำแบบไม่แก้แม่แบบ (ขั้นตอนด้านล่าง) ดูก่อนนะครับ แล้วถ้าไม่ได้จริง ๆ ค่อยแก้แม่แบบอีกที

ตาม หน้า Support ของ phpBB (I am seeing &#nnnn; sequences output instead of what I typed!) เขาว่า นี่เป็นเพราะ phpBB ยังไม่รองรับ utf-8 ... อ้าว เวร อุตส่าห์แก้+แปลเพิ่มมาตั้งเยอะ ไม่รู้ล่ะ ยังไงฉันก็จะใช้ให้ได้
(อัพเดท 2007.11.02: ปัญหาที่เกิดตามหน้า support นั้น ไม่ใช่ว่า phpBB ไม่รองรับ utf-8 แต่น่าจะเป็นตัว template (theme) นั้น ๆ มันไม่ยอมเปลี่ยน charset declaration ของ HTML page ให้เป็นไปตามที่ตั้งไว้ใน $lang['ENCODING'] วิธีแก้ในกรณีนี้ ก็คือไม่ต้องใช้ตัวแปรที่ว่า แต่ฮาร์ดโค้ดไปเลย ตามที่แสดงด้านล่าง)

มันก็มีวิธี hack ๆ ก็คือ แทนที่จะใช้ตัวแปร S_CONTENT_ENCODING สำหรับ charset ใน header/meta ของ HTML เราก็ hard code มันไปซะเลย ใช้กำลังเข้าบังคับ

โดยเข้าไปแก้ที่ไฟล์ *_header.tpl ของแม่แบบที่เราจะใช้ ซึ่งพวกแม่แบบนี่ ก็จะอยู่ในไดเรกทอรี “templates”

ในที่นี้ เว็บบอร์ด NSC ภาคกลาง ใช้แม่แบบชื่อ subSilver ซึ่งมีไฟล์เฮดเดอร์อยู่สองไฟล์ คือ overall_header.tpl และ simple_header.tpl ก็แก้มันทั้งคู่

ดูบรรทัดบน ๆ แก้จาก:

<meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCO
DING}">

เป็น:

<!-- <meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCO
DING}"> -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

คือบังคับเลย ว่า “แกต้องเป็น utf-8 นะ เข้าใจไหม ?”
อัพเดท: บางทีอาจจะไม่ต้องแก้ขั้นตอนนี้ก็ได้ แก้แต่ตัวชุดภาษาก็พอ

แก้เสร็จแล้วลอง ๆ โพสต์ดูนะครับ ว่าได้รึเปล่า ลองกดดูซอร์สด้วย ว่าที่แสดงผล กับ HTML code มันเหมือนกันรึเปล่า

ส่วนนี่คือหน้าตาของที่ nsc.siit.net/webboard
Screenshot

สำหรับไฟล์ชุดภาษาที่แปลงเป็น utf-8 แล้ว ดาวน์โหลดได้ที่ http://arthit.googlepages.com/lang_thai-utf8.tar.gz โดยผมได้แปลเพิ่มเติมเอาไว้บางส่วนด้วย (ส่วนใหญ่จะเป็นพวกคำพื้น ๆ ที่ยังใช้ภาษาอังกฤษอยู่ เช่น admin, moderator, email, username, password ทำนองนี้) — เดี๋ยวจะส่งให้กับทางผู้ดูแลแพคเกจต่อไป

นอนดีกว่า - -"

technorati tags: , , ,

4 comments:

anpanpon :P said...

เฮ้ย เสื้อที่แกให้ big นี่มันลายมาจากคนนี้นิหว่า
http://thelittlefriendsofprintmaking.com/

au8ust said...

รู้สึกจะมีแต่ SMF มั้งที่รองรับ UTF-8 เต็มรูปแบบ? ลองใช้ IPB, vBulletin ก็มีเรื่องทะเลาะกับ UTF-8 เหมือนกัน :(

bact' said...

may be phpBB 3.0 will fully support UFT-8

Anonymous said...

phpBB ทุกเวอร์ชัน สนับสนุน UTF-8 ครับ
แต่ปัญหาอาจอยู่ที่ PHP, Apache, หรือ MySQL ครับ