Saturday, June 06, 2015

[PrestaShop] การอธิบายเพิ่มเติม ในเนื้อหาภายในโครงสร้างว่ามีลักษณะอย่างไร สำหรับการเขียนเว็บไซต์หลายภาษา ด้วย PrestaShop ตอนที่ 2

[PrestaShop] หลังจากที่ทราบโครงสร้างขอ PrestaShop สำหรับการทำเว็บไซต์หลายภาษาแล้ว ทั้งนี้จะอธิบายเพิ่มเติม ในเนื้อหาภายในโครงสร้างว่ามีลักษณะอย่างไร เพื่อความเข้าใจก่อนการปรับแต่งให้เหมาะสมกับเว็บไซต์ของตัวเอง

ไฟล์ admin.php จาก Folder Translations มีโครงสร้างดังนี้
$_LANGADM['AdminCartRulesd3b206d196cd6be3a2764c1fb90b200f'] = 'Delete selected';

แบ่งโครงสร้าง
$_LANGADM เป็น ตัวแปร เรียกว่า Array
'AdminCartRulesd3b206d196cd6be3a2764c1fb90b200fคือ Key ของ Array นั้น ๆ โดยประกอบไปด้วย โมดูล + MD5
d3b206d196cd6be3a2764c1fb90b200คือ MD5 ของข้อความของ Delete selected = d3b206d196cd6be3a2764c1fb90b200f

'Delete selected'; คือ ค่าที่บรรจุลงใน Array ข้างต้น เช่นถ้าเปลี่ยนเป็น ‘selected to delete’; ข้อความที่แสดงผ่านหน้าจอจะเปลี่ยนไป และหากอยากเปลี่ยนเป็นภาษาไทยเลยยังได้ เช่น
$_LANGADM['AdminCartRulesd3b206d196cd6be3a2764c1fb90b200f'] = 'ลบรายการที่เลือก';
*** ที่สำคัญ md5 ที่ได้จะต้องไม่เปลี่ยนแปลง ซึ่งจะยังคงเป็น md5 ของ Delete selected นั่นเอง
ต่อไปจะขยายความอีกครั้งว่าทำไมไม่เปลี่ยนแปลงในส่วน Key (เพิ่มเติม ***)


ไฟล์ template จาก modules โดยเลือก \modules\blockuserinfo เป็นตัวอย่าง จะเห็นไฟล์ .tpl ซึ่งเป็น PHP Smarty Template อาจจะอยู่ภายใต้ Folder views หรืออยู่ข้างนอกก็ได้
ตัวอย่าง PHP Smarty Template
<p id="header_user_info">
                        {l s='Welcome' mod='blockuserinfo'}
                        {if $logged}
                                     <a href="{$link->getPageLink('my-account', true)|escape:'html'}" title="{l s='View my customer account' mod='blockuserinfo'}" class="account" rel="nofollow"><span>{$cookie->customer_firstname} {$cookie->customer_lastname}</span></a>
                                     <a href="{$link->getPageLink('index', true, NULL, "mylogout")|escape:'html'}" title="{l s='Log me out' mod='blockuserinfo'}" class="logout" rel="nofollow">{l s='Sign out' mod='blockuserinfo'}</a>
                        {else}
                                     <a href="{$link->getPageLink('my-account', true)|escape:'html'}" title="{l s='Log in to your customer account' mod='blockuserinfo'}" class="login" rel="nofollow">{l s='Sign in' mod='blockuserinfo'}</a>
                        {/if}
            </p>
 

ในโครงสร้าง *.tpl นั้นจะบรรจุ Tag สำหรับ การแสดงผลในรูปแบบหลายภาษาด้วยตัวอย่างดังนี้
{l s='Welcome' mod='blockuserinfo'}
{l s='View my customer account' mod='blockuserinfo'}
{l s='Log me out' mod='blockuserinfo'}
{l s='Log in to your customer account' mod='blockuserinfo'}
{l s='Sign in' mod='blockuserinfo'}

คำอธิบาย
{} คือ โครงสร้างการแสดงผล Smarty
คือ การแสดงผลภาษา
คือ ข้อความที่ต้องการแสดงผล
mod คือ Module สำหรับการแสดงผลภาษานั้น ๆ

โดยปกติการเขียน Tag ในส่วน Template ของ Smarty นั้นเรามักจะเขียนเป็นภาษาอังกฤษเป็นมาตรฐาน ดังนั้นจะหมายความว่า เราไม่จำเป็นต้องเขียนไฟล์ภาษา en.php เลย หากแต่ว่า มีบางโมดูลไม่ได้เขียนเป็นภาษาอังกฤษก็จำเป็นจะต้องเขียนโครงสร้างไฟล์ภาษา en.php ด้วยเช่นเดียวกัน (***ข้อควรระวังการเขียน l s=’String Key’ ด้วยภาษาอะไร ก็ต้องจัดทำ MD5 ด้วยภาษานั้น ๆ)

ครั้งต่อไปจะพูดถึง Translations สำหรับ Modules โดยดูความสัมพันธ์ของ .tpl และ .php


Tags:

Multilanguage,Translation,PrestaShop,Module,Admin,Smarty,PHP

Writer:
WindowsDNA

No comments: