×

คำเตือน

JFolder::create: Path not in open_basedir paths.

javascriptหลังจากที่ผมไม่ได้ปรับปรุงเพิ่มเติมบทความมาซักพัก วันนี้เลยขอแก้ตัวด้วยบทความสั้นๆ สำหรับนักพัฒนาจุมล่า 1.6+ ทั้งหลายนั่นคือการแปลข้อความใน JavaScript ของเรา ปกติการเขียนคอมโพเนนท์เพื่อรองรับการใช้งานหลายๆ ภาษาเรามักจะเจอปัญหานี้ว่า กรณีเราจะให้แสดงภาษาใน JavaScript เป็นภาษาของผู้ใช้ในขณะนั้นทำอย่างไร ปกติเราอาจจะไม่ค่อยได้เขียนในลักษณะนี้มากนัก หากเราเขียนเพื่อใช้งานในองค์กร แต่หากเราเขียน open source และเราต้องการให้รองรับการใช้งานหลายๆ ภาษาเราจะเจอปัญหานี้

ตัวอย่างการใช้งาน

ตัวอย่างการใช้งานเช่นในโค้ด PHP ของจุมล่าเรามีข้อความ คือ COM_REGONLINE_DEMO_TEXT ที่เราต้องการแสดงผลในภาษาอังกฤษว่า "Test Text" ในภาษาไทยว่า "ข้อความทดสอบ" ถ้าใน PHP เราก็แค่เอาข้อความนี้แสดงว่าฟังก์ชั้น JText::_() คือ JText::_('COM_REGONLINE_DEMO_TEXT') แล้วก็เอาข้อความนี้ไปแปลในไฟล์ภาษาคือ

 

ภาษาอังกฤษ ไฟล์ en-GB.com_regonline.ini

            COM_REGONLINE_DEMO_TEXT="Test Text"

ภาษาไทย ไฟล์ th-TH.com_regonline.ini

             COM_REGONLINE_DEMO_TEXT="ข้อความทดสอบ"

แต่ข้อความเหล่านี้ยังไม่สามารถใช้งานใน JavaScript ได้นะครับ เช่นเราต้องการแจ้งเตือนผู้ใช้ด้วยคำสั่ง alert() ใน JavaScript เราก็ไม่สามารถทำได้เหมือนกับใน PHP แต่ใน Joomla รุ่น 1.6 เป็นต้นมาตัวจุมล่าจะมีฟังก์ชัน JavaScript ชื่อ Joomla.JText._() ให้เราใช้งานได้ แต่เราต้องเอาข้อความเหล่านี้ใส่ใน Strings ของ JavaScript ก่อนโดยใช้ JText::script() ดังนั้นขั้นตอนการทำก็คือ

ขั้นตอนที่ 1 ทำการแปลข้อความในไฟล์ภาษาของคอมโพเนนท์ เช่น th-TH.com_regonline.ini ในกรณีสมมุติว่าคอมโพเนนท์ชื่อ com_regonline

         COM_REGONLINE_DEMO_TEXT="ข้อความทดสอบ"

ขั้นตอนที่ 2 ทำการใส่ข้อความเข้าไปใน JavaScript Strings โดยใช้ฟังก์ชัน JText::script()

         <?php JText::script("COM_REGONLINE_DEMO_TEXT"); ?>

ขั้นตอนที่ 3 ใช้งานใน JavaScript ผ่านฟังก์ชัน Joomla.JText._()

          alert( Joomla.JText._("COM_REGONLINE_DEMO_TEXT") )';

โดยฟังก์ชัน Joomla.JText._ จะมี parameter ตัวที่สองเป็น default text ที่จะใช้ในกรณีที่ไม่สามารถแปลข้อความได้ก็จะแสดงข้อความนี้แทน

ถึงแม้ว่าวิธีการนี้จะเป็นวิธีการที่แก้ปัญหาให้เราได้ แต่ถ้าสังเกตุให้ดีเราจะพบว่าเราจะต้องทำการเรียกฟังก์ชัน JText::script() สำหรับข้อความทีละข้อความทำให้การใช้งานไม่ค่อยจะสะดวกมากนัก สำหรับคนที่มาอ่านโค๊ดของเราก็อาจจะงงๆ อยู่บ้าง แต่ถ้าเราสามารถใช้วิธีสร้างไฟล์ขึ้นมาหนึ่งไฟล์และใส่ Key Index ไว้แล้วค่อยมาทำการ load ตัว JText::script ซักจุดนึ่งในคอมโพเนนท์ก็น่าจะดีกว่า ซึ่งผมจะลองทดสอบการใช้งานแบบนี้ดูแล้วจะแจ้งผลให้ทราบอีกครั้งนะครับ

สวัสดีครับ

comments