ย้ายบล็อกไปที่ 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: , , ,

7 comments:

Anonymous said...

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

Anonymous 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 ครับ

dysfunction said...

I'm amazed, I have to admit. Seldom do I encounter a blog that's equally educative and engaging, and let me tell you, you have hit the nail on the head. The issue is something not enough folks are speaking intelligently about. Now i'm very happy that I came across this in my hunt for something relating to this.

best ed pills said...

Thanks for your marvelous posting! I certainly enjoyed reading it, you may be a great author.I will make certain to bookmark your blog and will eventually come back at some point. I want to encourage you continue your great writing, have a nice holiday weekend!

erectile dysfunction natural remedies said...

This page really has all the info I wanted concerning this subject and didn't know who to ask.