[แนวคิด] การทำ Multi languages ใน DB
อันนี้ออกตัวไว้ก่อนเลย ว่าเป็นแนวคิด ทีผมคิดเองทำเอง อาจจะไม่ได้มาตรฐานนักแต่สำหรับผม it work!
เรื่องการออกแบบ multi languages คิดว่าคงจะพอมีความรู้ความเข้าใจกันอยู่บ้าง ก็ แค่ทำไฟล์ แยก ออกไป
Dir: english
Dir: thai
จากนั้นข้างใน โฟลเดอร์ก็บรรจุ ไปด้วย perfix_lang.php โดยมีตัวแปร เหมือนกันทุกประการ และก็ เอาไป echo ออกก็เท่านั้นเอง
แต่ ถ้าเปลี่ยนมาเป็น content จาก db ล่ะ ซึ่งมัน fix field ไว้ จะไปเพิ่มเป็น title_thai, title_english มันก็ดูน่าเกลียด พิลึก เราจะแก้ปัญหาไงดี …
ผมมี idea มาเสนอครับ คือเราก็เก็บแบบนี้ สมมุติ ข้อมูลด้านล่างนี่ ออกมาจาก db ละกันนะ
-
<?php
-
$string = <<<LANG
-
[lang=th]40 ส.ว.เปิดเวทีชำแหละโครงการเช่ารถเมล์ 4,000 คัน โดยที่ประชุมมีมติเป็นเอกฉันท์ บวกกับเสียงส.ว.ส่วนใหญ่ไม่เห็นด้วย แนะรัฐบาลไม่ควรปล่อยให้โครงการนี้ผ่านความเห็นชอบ พิสูจน์ความจริงใจของรัฐบาล ได้กลิ่นทะแม่งเสนอโครงการหวังสะสมเสบียงรับมือเลือกตั้ง[/lang]
-
-
[lang=en]• Death toll from Cyclone Aila climbs to 168 in India, Bangladesh
-
• Suicide car bomber kills 30, wounds at least 250 in Pakistan
-
• Underground nuclear test shows North Korean threat is growing
-
• Smoke from tire fire forces evacuation of small East Texas town
-
• $7,000 fine proposed for Wal-Mart worker’s stampede death
-
• Study: Late perimenopause stage may affect memory
-
• Peter Zezel, who played 15 seasons in the NHL, dies at 44
-
• NBA · NHL · MLB · NFL · French Open · Soccer · NASCAR[/lang]
-
-
[lang=jp]
-
-
* いつも殴り合うんだけど、すぐ仲直りするっておかしいですか?
-
-
ケンカになると擦り傷、青タンができるほどの殴り合い。でもケンカした後はすぐ仲直り。これっておかしいですか?
-
* ケンカの後ずっと黙ってしまう夫にどう対処したらいい?
-
-
ひたすらダンマリをし続ける夫に対して対処法が知りたい妻。回答には、同じタイプの男性からダンマリの理由とアドバイス。
-
* 仕事に支障なく家出はできる?
-
-
実家は距離的に無理。仕事もしていて荷物を考えると面倒になって……妙案はありますか? という質問に厳しいアドバイスが。
-
-
-
[/lang]
-
LANG;
-
?>
จากนั้นเวลาเราจะแยกมันออกก็ใช้ ความสามารถของ regular มาจัดการ
เท่านี้ เราก็สามารถจัดการได้แล้ว ง่ายนิดเดียวเอง
ที่สำคัญ regular อย่าลืม modifier s ด้วยละกัน
s (PCRE_DOTALL)
If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl’s /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier.
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
โอ้โฮ เก็บยังกับ .ini ยังงี้ใช้ parse_ini_file() ไปเลยดิ
มันเก็บแบบนั้นไม่ได้ไงครับ เพราะมันเป็น content ที่มาจาก input ฝั่ง client คือสมมุติ เค้ากรอก Title, Description แบบนี้ ผมจะเอาไปลง *.ini ได้ไงครับ มันก็ต้องเก็บลง DB สิ ถูกมั้ยครับ
เข้าใจครับ แหะ แหะ ผมผิดเองแหละ ใน php ไม่ยักกะมี parse_ini() ให้ใช้ เลยไม่ได้อ้างถึง จะหา read_ini/write_ini จากข้างนอก ก็เกรงจะช้ากว่า function ของเฮียแหงมๆ โชว์โง่เลยผม
แต่ที่ผมพูดถึงคือเก็บเป็น ini format หน่ะ ข้อมูลใน DB แหละ เอาออกมาแตกออกมาเป็น array จะแยกภาษา แยกหน้า นับจำนวนภาษาใน content ได้ด้วย(แบบไดนามิก) แต่จริงๆก็เก็บได้หลายแบบแหละเนอะ จะ INI,XML,Serialize ฯลฯ
“ที่สำคัญ regular อย่าลืม modifier s ด้วยละกัน”
อิอิ ไม่เข้าใจครับ ช่วยอธิบายอีกนิดน่ะครับ ขอบคุณครับ
เก็บๆ กำลังนึกอยู่เลยว่าจะเก็บ content ยังไง
แล้วถ้าใน content ผมมี tag [lang=en][/lang] หล่ะครับ
ก็ Replace มันออกสิ
ตัวอย่างอ่ะครับ [lang=en] การเขียน tag ควรเขียนดังต่อไปนี้ [lang=en]test[/lang][/lang]
เยียมมากเลยครับ ^_^
สุดยอดครับ ขออนุญาตินำไปใช้น่ะครับ ได้ทำเว็บ 2 ภาษาพอดีเลย
เก็บแยก record ไปเลยดีกว่าไหมครับ
cid lang content
1 en abc
1 th เอบีซี
2 en xyz
2 th เอ๊ก วาย แซด