web analytics

Laravel5 : ทำเว็บไซต์ให้รองรับหลายภาษา (Multi-language) บน Laravel 5.2

 

9-2x

ปัจจุบันเว็บไซต์ที่เราใช้ๆกัน ก็ไม่ได้มีเพียงภาษาเดียวอีกต่อไปแล้ว ยิ่งเป็นเว็บไซต์ธุรกิจข้ามชาติยิ่งต้องรองรับหลายๆภาษาในตัวเอง และแน่นอนว่า Laravel ได้เตรียมพร้อมมาเพื่อสิ่งนี้แล้ว บทความนี้ผมจะพามาทำให้เว็บไซต์ ที่เขียนด้วย Laravel 5  Framework ให้รองรับหลายภาษากัน วิธีการสั้นๆ ไม่ยากเลย บางทีอาจจะง่ายกว่าที่คิดไว้อีกนะ

 

 

เริ่มต้น

เพิ่มภาษาให้กับแอปก่อนครับ เข้าไปที่ config/app.php

ตัวอย่างนี้ผมจะเพิ่มภาษาลงไปตามต้องการ คือ en ภาษาอังกฤษ , th ภาษาไทย ที่จริงจะตั้งชื่ออะไรก็ได้นะ แต่ควรตั้งให้สื่อเข้าใจ จะเป็นเป็นมาตรฐาน

	
'locales' => ['en' => 'English', 'th' => 'Thai'],

 

ส่วนถ้ากำหนด default  ก็กำหนดที่ fallback_locale

     
 'fallback_locale' => 'en',

 

สร้าง Class Language ใน Middleware

มากำหนด middleware ให้เว็บกำหนดภาษาตามกำหนดใน Session ครับ

สร้าง ไฟล์ใหม่ ชื่อ Language.php ใน  app/Http/Middleware แล้วเติมโค้ดลงไป

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Routing\Redirector;
use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
use Illuminate\Contracts\Routing\Middleware;
use Session;


class Language implements Middleware {


    public function handle($request, Closure $next)
    {
        
        app()->setLocale(Session::get('locale'));

        return $next($request);
    }

}

 

กำหนด Middleware ลงใน Kernel

ต่อมา เพิ่ม class ที่สร้างไปคือ Language มาใส่ลงใน app/Http/Kernel.php เติมไปที่ท้ายของ $middleware

	protected $middleware = [

		...

		'App\Http\Middleware\Language',
	];

 

จะได้ประมาณนี้

1

 

ทีนี้เป็นอันเสร็จ step แรกแล้วครับ ต่อมาคือ มาสร้างที่เก็บคำศัพท์

สร้างโฟลเดอร์ภาษาสำหรับเก็บคำ

จากที่เรากำหนดภาษาไว้คือ en และ th เราก็ต้องสร้างที่เก็บภาษาให้ตรงตามกกำหนดไว้ครับ
เข้าไปที่ resources/lang แล้วสร้างโฟลเดอร์ภาษาตามต้องการให้ครบ ในที่นี้ของผมคือ th ,en (ปกติมันจะมี en มาให้ก่อน)

2

 

ลองสร้างไฟล์ home.php ในโฟลเดอร์ en

<?php

return [
	'key' => 'messages',
];

?>

 

โดยมันจะเก็บในรูปแบบ Array ข้างหน้า คือ key แล้วก็ตามด้วย ข้อความ ของภาษาไทยก็เช่นกัน

สร้างไฟล์ home.php ในโฟลเดอร์ th ก็ทำแบบเดียวกัน แค่เปลี่ยนข้อความด้านหลังเป็นภาษาไทย

ตัวอย่าง en/home.php

3

 

ตัวอย่าง th/home.php ชื่อไฟล์เดียวกัน และ key เหมือนเดิม

4

 

 

การนำไปใช้

พอเรากำหนดคำในแต่ละภาษาไว้เรียบร้อยแล้ว เราจะนำไปใช้กันครับ โดยการแสดงผลต้องเอาไปแสดงใน views
เช่น resources/views/home.blade.php

ตรงไหนที่เราจะพิมพ์ข้อความก็ เรียก

 {{ trans('home.hello') }}

หรือ

<?php echo trans('home.hello') ?>
<?php echo Lang::get('home.hello'); ?>

 

มันก็จะแสดงข้อความที่มี key ว่า hello แล้วละ ถ้าเราเลือกภาษาอะไรก็จะเอามาแสดง

การเปลี่ยนภาษา

มีกำหนดภาษา ก็ต้องมีการเปลี่ยนภาษาได้ แนะนำว่าให้ไปทำที่ Controller ครับ อันนี้ตามสะดวกเลย

แค่เรียกใช้

// $lang is 'en' or 'th'
Session::put('locale',$lang);
\App::setLocale($lang);

 

โดยอาจจะทำหน้าเปลี่ยนสำหรับภาษาให้ผู้ใช้เลือกเปลี่ยน สร้างฟอร์มธรรมดาๆ แล้วไปเรียก controller
ส่วน พารามิเตอร์ก็เป็น en หรือ th นั่นเอง

5

 

ลองทดสอบเปลี่ยนภาษาดูครับ ผมทดสอบกับ Benznest Wallet ของผมดู ลองหน้า home.blade.php ครับ

6

 

ลองทดสอบเปลี่ยนภาษาเป็นภาษาอังกฤษ

7

 

แล้วใน Database ละ ?

อันนี้ก็ต้อง manual เองครับ อยู่ที่ฐานข้อมูลแล้วละ อาจจะสร้าง field เพิ่มขึ้นมาเพื่อเก็บอีกภาษานึงโดยเฉพาะ

 

จบแล้ว

ไม่ยากเลยกับการเพิ่มภาษาให้สนับสนุนหลายๆภาษาบนเว็บไซต์ของเราใช่มัยครับ โดย Laravel เตรียมมาให้แล้ว ใช้อย่างง่ายดาย สนุกสนาน ซึ่งมีเกร็ดเล็กน้อยๆอีกมากที่ผมก็กำลังศึกษาอยู่ ผมก็ไม่แน่ใจว่าการทำ multi language แบบนี้จะเป็นวิธีที่ดีที่สุดรึปล่าว สามารถศึกษาได้จากเว็บของ laravel โดยตรงครับ หวังว่าจะเป็นแนวทางแล้วประโยชน์กับผู้ที่สนใจครับ

 

ต้องขอตัวไปอัพเดท Benznest Wallet ให้เป็นฉบับสมบูรณ์ก่อน คำเยอะมากๆเลยละ

 

 

Reference 
https://laravel.com/docs/5.0/localization