สอน-laravel-framework

สอน Laravel 5 : ทำเว็บไซต์ 2 ภาษาง่าย ๆ กับ Laravel

สอน Laravel 5 : ทำเว็บไซต์ 2 ภาษาง่าย ๆ กับ Laravel



หลักการทำเว็บไซต์ 2 ภาษาหรือมากกว่า 2 ภาษา ใน Laravel 5 โดยโครงสร้างการทำงานแล้วไม่ได้ต่างจาก
Codeigniter Framework มากนัก กล่าวคือจะมีการใช้งานหลัก ๆ อยู่เหมือนกันคือ ไฟล์ array สำหรับเก็บแต่ละภาษา
ตัวแปรแบบ session เก็บภาษาหลักที่ใช้งานอยู่ CI เปลี่ยนภาษาด้วยคำสั่ง $this->lang->line() ส่วน Laravel
เปลี่ยนภาษาด้วยคำสั่ง {{ trans() }} และ CI อาศัย Hook ตรวจสอบภาษาก่อนเข้าทำงานใน Controller ส่วน Lavavel
ใช้ Middleware เป็นต้น



ภาษาเริ่มต้นของ Laravel 5 จะเป็นภาษาอังกฤษคือ en และจะถูกตั้งค่าไว้ที่ตัวแปร locale ในไฟล์ config/app.php

ในกรณีที่เว็บไซต์เรารองรับหลายภาษาและเหตุปัญหาใด ๆ ก็ตาม Laravel อนุญาติให้เราตั้งค่าภาษาที่จะมาแทนที่ภาษาที่ไม่
สามารถทำงานได้ในขณะนั้นโดยสามารถกำหนดได้ที่ตัวแปร fallback_locale ในบรรทัดถัดลงมาของไฟล์ config/app.php

Laravel ใช้การเก็บตัวแปรภาษาทั้งหมดในรูปแบบ Array ซึ่งจะถูกเก็บไว้ใน resources/lang/en ถ้าเราลองเข้าไปดู
จะเห็นว่ามีโฟลเด้อ en ซึ่งเป็นภาษาเริ่มต้นปรากฏอยู่ก่อนแล้ว และข้างในโฟลเด้อ ก็จะมีไฟล์ .php ไว้เก็บภาษาเพื่อเอาไว้
ใช้งานในโอกาสแตกต่างกันไป

วิธีเพิ่มภาษาใหม่

วิธีเพิ่มภาษา เริ่มต้นเลยให้ไปสร้างโฟลเด้อที่สื่อถึงภาษานั้น ๆ ในโฟลเด้อ resources/lang/ ในที่นี้ผมจะสร้างโฟลเด้อ
เพิ่มมา 3 โฟลเด้อ คือ th,jp,ch เพื่อให้เว็บไซต์ใช้งานภาษาไทย จีน ญีปุ่น ได้ ซึ่งเราจได้โครงสร้างดังนี้

จากนั้นให้สร้างไฟล์เก็บภาษาทั้ง 4 ภาษาในชื่อเดียวกัน โดยให้ตั้งชื่อว่า message.php และวางไว้ในทั้ง 4 โฟลเด้อ
โดยในไฟล์ message.php ให้สร้างตัวแปร Array เก็บ Word ของแต่ละภาษาดังนี้
resources/lang/th/message.php

นั่นหมายความว่าในโฟลเด้อ resources/lang/jp/message.php เราจะต้องได้ตัวแปร Array แบบนี้
resources/lang/jp/message.php

ทำแบบเดียวกันนี้กับอีกทั้ง 2 ภาษาคือ en กับ ch เมื่อเสร็จแล้วเราก็จะได้ไฟล์ภาษามาใช้งานในเว็บไซต์เราถึง 4 ภาษา
ที่เหลือก็จะเป็นการใช้งานตอนแสดงผลในส่วน view คือ html และทำฟังก์ชั่นการเปลี่ยนภาษา

วิธีแสดงภาษาใน View

การแสดงผลใน html ไฟล์ก็ไม่มีอะไรยุ่งยากครับให้ใช้คำสั่ง tran() และตามด้วยชื่อไฟล์ และชื่อตัวแปรนั้น ๆ ตัวอย่างเช่น

ถ้า locale เท่ากับ th ผลลัพธ์ที่ได้จะเท่ากับ “บริการของเรา” แต่ถ้า locale เป็น jp ผลลัพธ์จะเท่ากับ “サービス”

สร้างฟังก์ชั่นเปลี่ยนภาษาใน Routes

ในบทความนี้จะเป็นการสร้างฟังก์ชั่นให้เปลี่ยนค่าภาษาใน routes โดยไม่ผ่าน Controller นะครับ สามาถเปลี่ยนได้
เริ่มจากไปกำหนด uri สำหรับเปลี่ยนภาษา เปิดไฟล์ app/Http/routes.php จากนั้นสร้าง uri เริ่มต้นและเปลี่ยนภาษาดังนี้
app/Http/routes.php


สร้างตัวกรอง Request เพื่อเปลี่ยนภาษาด้วย Middleware

เมื่อมีการร้องขอหรือเกิดคำสั่งต่าง ๆ มาที่ routes เราจะสามารถตรวจคำสั่งหรือ request นั้น ๆ ได้ด้วยการเพิ่ม
คลาส Middleware เข้าไปก่อน Middleware เป็นอีกหนึ่งความสามารถที่มีใน Laravel 5 หลักการทำงานกับการ Filter
ใน Laravel เวอร์ชั่นก่อนหน้านี้ วิธีสร้าง Middleware คลาสให้เราสร้างไฟล์ .php ไว้ใน app/Http/Middleware
ในที่นี้ให้เราสร้างไฟล์ Language.php และเขียนโค๊ดในไฟล์ดังนี้
app/Http/Middleware/Language.php


เปิดใช้งาน Middleware

หลังจากที่เราสร้าง Middleware เสร็จแล้วจำเป็นที่จะต้องเปิดใช้งานก่อน วิธีเปิดใช้งานให้เราไปเพิ่มคลาส
Language.php ที่ไฟล์ app/Http/Kernel.php ที่ตัวแปร $middlewareGroups ให้เราเพิ่มเข้าไปดังนี้

app/Http/Kernel.php


ทดสอบสร้าง View เปลี่ยนภาษา

จากการเขียนคำสั่งและตั้งค่าที่ผ่านมาเราได้เตรียมสภาพแวดล้อมเพื่อให้เว็บไซต์สามารถเปลี่ยนภาษาได้ทั้ง 4 ภาษาเรียบร้อย
แล้วครับ ต่อไปเราเพียงแค่สร้าง view หรือ html ไฟล์ให้ส่ง request ภาษาเข้ามาว่าจะให้เว็บแสดงผลในภาษาอะไร
ซึ่งเราสามารถเขียนได้ในลักษณะดังนี้ครับ

ให้ท่านทดสอบโดยการสร้างไฟล์ home.blade.php และวางไว้ใน resources/views/home.blade.php
จากนั้นลองเขียน html ง่าย ๆ เพื่อแสดงภาษาต่าง ๆ ตาม request ที่ส่งเข้ามา โดยสามารถเขียนคร่าว ๆ ได้ดังนี้

resources/views/home.blade.php

เสร็จแล้วครับเว็บไซต์ 4 ภาษา โดยโครงสร้างที่ต้องเพิ่มและแก้ไขสำหรับทำให้เว็บไซต์แสดงผลได้ทั้ง 4 ภาษา
จะมีโครงสร้างไฟล์ ดังนี้ครับ

ซึ่งท่านสามารถดาวน์โหลดทั้ง 5 ไฟล์เพื่อไปทดสอบการทำงานได้ที่ลิงค์ด้านล่างครับ

ดาวน์โหลดไฟล์ตัวอย่าง เปลี่ยนภาษาด้วย Laravel 5


Summary
สอน Laravel 5 : ทำเว็บไซต์ 2 ภาษาง่าย ๆ กับ Laravel
Article Name
สอน Laravel 5 : ทำเว็บไซต์ 2 ภาษาง่าย ๆ กับ Laravel
Description
หลักการทำเว็บไซต์ 2 ภาษาหรือมากกว่า 2 ภาษา ใน Laravel 5 โดยโครงสร้างการทำงานแล้วไม่ได้ต่างจาก Codeigniter Framework มากนัก กล่าวคือจะมีการใช้งานหลัก ๆ อยู่เหมือนกันคือ ไฟล์ array สำหรับเก็บแต่ละภาษา ตัวแปรแบบ session เก็บภาษาหลักที่ใช้งานอยู่ CI เปลี่ยนภาษาด้วยคำสั่ง
Author
Publisher Name
บริษัท โค๊ดบี จำกัด
Publisher Logo

กระทู้ใกล้เคียง

สอน Laravel 5 : ใช้งาน Controller ร่วมกับ Router... สอน Laravel : ใช้งาน Controller ร่วมกับ Router โดยทั่วไปแล้ว Controller คือหัวใจหลักของการทำงานใน PHP MVC Framework เป็นส่วนที่ทำหน้าที่เชื่อมโยง ...
สอน Laravel 5 : สร้าง html form ส่งข้อมูลแบบ POST... สอน Laravel 5 : สร้าง html form ส่งข้อมูลแบบ POST การสร้างแบบฟอร์มเพื่อรับข้อมูลแบบ POST จากผู้ใช้งานเว็บไซต์ และส่งข้อมูลนั้นไปยังส่วนของการบันทึก...
สอน Laravel 5 : การใช้งานไฟล์ assets ต่าง ๆ ใน Vie... สอน Laravel 5 : การใช้งานไฟล์ assets ต่าง ๆ ใน View จากบทความที่แล้ว เราได้ทำความเข้าใจเกี่ยวกับ Router ใน Laravel ซึ่งมีบทบาทที่สำคัญมาก ๆ สำหรับน...
สอน Laravel 5 : กำหนดเส้นทางเว็บไซต์ด้วย Router... สอน Laravel 5 ตอน : กำหนดเส้นทางเว็บไซต์ด้วย Router Router เป็นส่วนที่มีไว้เพื่อกำหนดเส้นทางการทำงานของเว็บไซต์ ตัวอย่างเช่นเมื่อมีคนเข้าชมเว็บไซต์...

Comments

comments