การแปลภาษาสำหรับ JavaScript
แก้ไขล่าสุด ใน วันจันทร์ที่ 06 กุมภาพันธ์ 2555 เวลา 00:26 น. เขียนโดย ประสิทธิ์ เก็บทรัพย์ วันอาทิตย์ที่ 05 กุมภาพันธ์ 2555 เวลา 23:57 น.
หลังจากที่ผมไม่ได้ปรับปรุงเพิ่มเติมบทความมาซักพัก วันนี้เลยขอแก้ตัวด้วยบทความสั้นๆ สำหรับนักพัฒนาจุมล่า 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 ซักจุดนึ่งในคอมโพเนนท์ก็น่าจะดีกว่า ซึ่งผมจะลองทดสอบการใช้งานแบบนี้ดูแล้วจะแจ้งผลให้ทราบอีกครั้งนะครับ
สวัสดีครับ
| ถัดไป >ประโยชน์ของ Discover ใน Joomla! 1.6+ สำหรับ Programmer |
|---|


