Saturday, June 20, 2015

[PrestaShop][Language] เจาะลึกกับ Translations ในส่วนของ Module และ ระบบ

[PrestaShop][Language] เจาะลึกกับ Translations ในส่วนของ Module และ ระบบ (ภาคจบ)
          ใน Folder Translations และ Lang นั้น มีโครงสร้างที่แตกต่างกัน วันนี้จะขออธิบายโครงสร้างทั้งหมด เพื่อให้ทุกท่านได้ลองใช้งานกันได้ถูกต้องและเป็นอัตโนมัติ หากใช้งานคู่กับ Prestashop Automatic Translations with Google

โครงสร้าง translations จากระบบ ตัวอย่างเช่น \translations\en\admin.php
global $_LANGADM; 
$_LANGADM 
= array(); 

$_LANGADM
['AdminAddressesd3b206d196cd6be3a2764c1fb90b200f'] = 'Delete selected'; 
$_LANGADM
['AdminAddressese25f0ecd41211b01c83e5fec41df4fe7'] = 'Delete selected items?'; 
$_LANGADM
['AdminAddressesb718adec73e04ce3ec720dd11a06a308'] = 'ID'; 

หากเป็นตัวแปรของ admin หรือทำหน้าที่แสดงข้อความจากส่วน Backend นั้นจะใช้ ตัวแปรชื่อว่า $_LANGADM โดยมีส่วนประกอบดังนี้
$_LANGADM['AdminAddressesd3b206d196cd6be3a2764c1fb90b200f'] = 'Delete selected'; 

$_LANGADM คือ ชื่อตัวแปร
AdminAddresses คือ ชื่อโมดูลที่แสดงผลในแต่ละส่วน
d3b206d196cd6be3a2764c1fb90b200f คือ  MD5 ของข้อความ ‘Delete selected’
'Delete selected' คือ ข้อความที่ต้องการแสดงผล
ทั้งนี้ยังมีอีกหลาย ๆ ตัวแปรสำหรับส่วนของ admin ไม่ว่าจะเป็น $_ERRORS, $_FIELDS, $_LANGPDF ยกเว้นแต่ $_TABS จะระบุ Key ที่ไม่ต้องการ Encrypt ด้วย MD5

โครงสร้าง translations จากโมดูล ตัวอย่างเช่น fbconnect_psb\translations
global $_MODULE; 
$_MODULE 
= array(); 
$_MODULE
['<{fbconnect_psb}prestashop>registration_fb_6335a00a08fde0fbb8f6d6630cdadd92'] = 'ข้อมูลส่วนบุคคล'; 
$_MODULE
['<{fbconnect_psb}prestashop>registration_fb_b78a3223503896721cca1303f776159b'] = 'คำนำหน้า'; 

จะสังเกตุได้ว่า โครงสร้าง Translations ของ โมดูลนั้น จะมีตัวแปรที่แตกต่างออกไป ซึ่งระบบใน Prestashop เลือกใช้เป็นตัวแปรชื่อ $_MODULE โดยมีรายละเอียดดังนี้
$_MODULE['<{fbconnect_psb}prestashop>registration_fb_6335a00a08fde0fbb8f6d6630cdadd92'] = 'ข้อมูลส่วนบุคคล'; 
$_MODULE คือ ตัวแปรสำหรับเก็บภาษา
<{fbconnect_psb}prestashop>registration_fb_ คือ Key ของการแสดงผลของภาษาในแต่ละส่วน โดยจะมีส่วนประกอบย่อยดังนี้
·       {fbconnect_psb} ชื่อโมดูล
·       <prestashop> คือ Tag
·       registration_fb คือ Action หรือ template File(*.tpl) ของแต่ละหน้าจอของโมดูลนั้น ๆ
เมื่อ 3 ส่วนนี้ประกอบเข้าด้วยกัน จะรองรับ Module ที่มี Template หลาย ๆ หน้าจอได้ ด้วย translation ไฟล์เดียว
** ข้อสำคัญ ถึงแม้ว่าจะมีคำ ๆ เดียวกัน แต่ต่างกันระหว่าง Template จำเป็นจะต้องเขียน Key ที่แตกต่างกันด้วย
*** สำหรับ ไฟล์ Template (*.tpl) จะเห็นวิธีการเขียนการแสดงผลของข้อความเป็นดังนี้
{l s='Your personal information' mod='fbconnect_psb'}
หมายความว่า l(anguage) ที่มีข้อความ s(tring) ชื่อ Your personal information ในส่วนของ mod(ule) ชื่อว่า fbconnect_psb ซึ่งจะสัมพันธ์กับ en.php หรือ th.php ในคำอธิบายด้านบน

6335a00a08fde0fbb8f6d6630cdadd92 คือ MD5 ของข้อความ ข้อมูลส่วนบุคคล
'ข้อมูลส่วนบุคคล'คือ ข้อความที่ต้องการแสดงผล

โครงสร้าง lang จาก theme ตัวอย่างเช่น \themes\ap_office\lang ซึ่งเป็นตัวอย่างสุดท้าย
global $_LANG; 
$_LANG 
= array(); 

$_LANG
['404_d0fbda9855d118740f1105334305c126'] = 'Page not found'; 
$_LANG
['404_44b1d05764b093cb00c25b8228cb87d3'] = 'This page is not available'; 
$_LANG
['addresses_d95cf4ab2cbf1dfb63f066b50558b07d'] = 'My account'; 
$_LANG
['addresses_e45be0a0d4a0b62b15694c1a631e6e62'] = 'My addresses'; 

สำหรับ language ที่ได้เขียนผ่าน theme นั้น จะมีลักษณะ ตัวแปรใหม่ ซึ่งเราจะเห็นว่าใช้ตัวแปรชื่อ $_LANG โดยที่ตัวแปรนี้จะควบคุมการแสดงผลทั้งหมดของ THEME โดยมีรายละเอียดดังนี้
$_LANG['addresses_e45be0a0d4a0b62b15694c1a631e6e62'] = 'My addresses'; 
$_LANG คือตัวแปร
addresses_ คือ Action หรือ Template File(*.tpl) ในการกำหนดความสัมพันธ์ของการแสดงผลในหน้าจอ เช่นตัวอย่างนี้จะสัมพันธ์กับ addesses.tpl ซึ่งภายในไฟล์จะเขียนคำสั่งในการแสดงผลในตัวอย่างนี้
{l s='My addresses'} จะเห็นได้ว่าเป็น Language ย่อส่วนโดยไม่ต้องระบุ mod(ule) ต่อท้าย เพราะใช้ไฟล์ language โดยรวมของ theme ไปแล้ว

e45be0a0d4a0b62b15694c1a631e6e62 คือ MD5 ของ My addresses
'My addresses' คือ ค่าที่ต้องการแสดงข้อความผ่านหน้าจอต่าง ๆ


          สรุปโดยรวม จะเห็นได้ว่า การออกแบบ Prestashop นั้นได้ถูกออกแบบมาเพื่อรองรับ Multilingual หรือการทำเว็บไซต์หลายภาษามาเป็นอย่างดี อย่างไรก็ตามจะมี Language อื่น ๆ ที่ไม่ได้กล่าวถึง แต่ก็มีส่วนสำคัญคือ Language ใน Database แต่ที่ไม่กล่าวถึงเนื่องจาก ทุกท่านสามารถบันทึกผ่านหน้าจอของระบบได้เลย โดยที่ระบบจะมีให้เลือกบันทึกข้อความผ่าน language แต่ละส่วนด้วยเช่นกัน เพื่อให้ เนื้อหาที่แสดงในหน้าจอนั้นมีความครบถ้วนในทุก ๆ ภาษาที่ผู้เขียนต้องการจะสื่อ


หวังเป็นอย่างยิ่งว่า บทความนี้จะทำให้ทุกท่านเข้าใจใน กลไก การทำงานหลายภาษาของ Prastashop ได้เป็นอย่างดี หากมีข้อสงสัย ส่งข้อความสอบถามได้ครับ ยินดีต้อนรับทุกท่าน

No comments: