วิธีทำเว็บไซต์ 2 ภาษา โดยใช้ Dababase อย่างง่าย
วิธีทำเว็บไซต์ 2 ภาษา โดยใช้ Dababase อย่างง่าย
จากบทความนี้ https://www.codebee.co.th/labs/วิธีทำเว็บ-2-ภาษา-หรือจะท/ เราได้เรียนรู้วิธีทำเว็บไซต์ 2 ภาษา โดยข้อมูลภาษาที่ได้ เป็นข้อมูลแบบ static คือเป็นข้อมูลแบบคงที่ ไม่ได้มีระบบการอัพเดทเปลี่ยนแปลงจากหลังบ้าน ทุก ๆ ข้อมูลที่แสดงผลจะถูกเก็บไว้ในไฟล์ภาษาของ codeigniter framework
ในบทความนี้เราจะมาทดสอบการทำเว็บไซต์ 2 ภาษา แบบที่ดึงข้อมูลจากฐานข้อมูลที่เราออกแบบไว้ ซึ่งการทำเว็บไซต์แบบนี้จะทำให้เราสามารถปรับปรุงเปลี่ยนแปลงข้อมูลในแต่ละภาษาได้ จากการเปลี่ยนแปลงข้อมูลของแต่ละภาษาจากระบบหลังบ้าน การพัฒนาฟังก์ชั่นแบบนี้จะทำให้สะดวกสบายกับผู้ใช้งาน หรือ webmaster ผู้ดูแลเว็บไซต์ ในกรณีที่ต้องการเปลี่ยนข้อมูลการแสดงผลของแต่ละภาษาในเว็บไซต์
เพิ่ม suffix หรือคำลงท้ายให้กับ field ในฐานข้อมูล
หลักการในการทำเว็บไซต์ที่สามารถรองรับได้หลายภาษาในบทความนี้ ไม่ได้ซับซ้อนยุ่งยากอะไร เป็นหลักการง่าย ๆ เลยคือการเพิ่มคำลงท้ายให้กับฟิลด์ที่ใช้เก็บข้อมูลภาษาของแต่ละภาษา ตัวอย่างเช่น
ออกแบบ Field ในตารางฐานข้อมูลให้มี Suffix ( คำลงท้าย ) เป็นตัวย่อของภาษา
จากตัวอย่างรูปด้านบน ผมได้ทดลองสร้าง ตารางฐานข้อมูลชื่อว่า blog ในตารางมีด้วยกันทั้งหมด 4 Field คือ
- blog_id เป็น primary key และ auto increment
- content_en เป็น longtext สำหรับเก็บเนื้อหาภาษาอังกฤษ
- content_th เป็น longtext สำหรับเก็บเนื้อหาภาษาไทย
- timestamp เป็น timestamp สำหรับเก็บวันเวลาที่สร้างเนื้อหา
ในกรณีที่มีมากกว่า 2 ภาษาก็ให้เพิ่ม Field เข้าไปอีกเช่น content_fr, content_ch, content_jp เป็นต้น
สร้าง libraries สำหรับตั้งค่าภาษาเริ่มต้นและเปลี่ยนภาษา
หลังจากที่เราได้ออกแบบตารางฐานข้อมูลที่มี Field แบบลงท้ายด้วย Suffix ตัวย่อของภาษาเรียบร้อยแล้ว ขั้นตอนต่อไปคือการเรียกมาแสดงผล ตามการเปลี่ยนภาษา เริ่มต้นให้เราสร้าง libraries ขึ้นมา 1 คลาสตั้งชื่อว่า Langlib.php ดังนี้
applications/libraries/Langlib.php
class Langlib{ private $CI; public function __construct() { $this->CI =& get_instance(); // ประกาศแปรแบบ Sigleton ทำให้เราสามารถเข้าถึงคลาสต่าง ๆ ได้ใน lib นี้ } public function init_default_language() // ฟังก์ชั่นสำหรับตรวจสอบภาษาปัจจุบันที่เลือก { if($this->CI->session->userdata('lang')==NULL){ // ถ้าไม่มี session อยู่ให้ค่าเริ่มต้นเป็นภาษาไทย $lang = 'thailand'; $this->CI->session->set_userdata('lang',$lang); }else{ $lang = $this->CI->session->userdata('lang'); } if($lang == "thailand"){ $this->CI->PAGE['suffix'] = "th"; // ประกาศตัวแปร suffix มีค่าตามภาษานั้น ๆ }else{ $this->CI->PAGE['suffix'] = "en"; } } public function chooseLang($lang) // ใช้สำหรับเปลี่ยนภาษา เปลี่ยนค่าตัวแปร session และ refresh หน้า { $this->CI->session->set_userdata('lang',$lang); redirect($this->CI->router->class,'refresh'); } }
สร้าง Controller และเรียกใช้งาน langlib
applications/controllers/welcome.php
class Welcome extends CI_Controller { public $PAGE; public function __construct() { parent::__construct(); $this->langlib->init_default_language(); // เรียกใช้งาน init_default_language ในทุก ๆ Controller } public function index() { $query = $this->db->query('SELECT * FROM blog'); $this->PAGE['blog'] = $query->result_array(); $this->load->view('welcome_message',$this->PAGE); // ส่งตัวแปร suffix ไปในทุก ๆ view } public function change($type) { $this->langlib->chooseLang($type); // ใช้สำหรับเปลี่ยนภาษาในทุก ๆ controller } }
การใช้งานในส่วนของ view
applications/views/welcome_message.php
<?php $CI =& get_instance(); ?> <div id="body"> <p> <a href="<?php echo $CI->router->class."/change/thailand"; ?>">TH</a> | <a href="<?php echo $CI->router->class."/change/english"; ?>">EN</a> </p> <?php foreach($blog as $row){ $content = $row['content_'.$suffix]; // มี suffix ต่อท้ายฟิลด์เสมอ } ?> <p><?=$content; ?></p> </div>
ตัวอย่างการทำงาน