Quy trình tạo site đa ngôn ngữ với Laravel

03cd82 2024

1 - Trong thư mục resource tạo file ngôn ngữ

/resources
    /lang
        /en
            messages.php
        /vi
            messages.php

2 - Trong file route web.php tạo 1 route để thực hiện thiết lập locate

use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
Route::get('/lang/{locale}', function ($locale) {
    if (! in_array($locale, ['en', 'vi'])) {
        abort(400);
    }
    App::setLocale($locale);

    Session::put('lang', $locale);
    return redirect()->back();

});

3 - Tạo midlware để thực hiện thiết lập locate:

Chạy lệnh: php artisan make:middleware Localization

4 - Vào file Kelnel.php thêm route midlware

 

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin'    =>   \App\Http\Middleware\GoToAdminPage::class,
        'localization' => \App\Http\Middleware\Localization::class,  // thêm dòng này
    ];

 

5 - Vào file Localization.php sửa hàm handle như sau

public function handle(Request $request, Closure $next)
{

    $locale = Session::get('lang', config('app.locale'));
    
    if (! in_array($locale, ['en', 'vi'])) {
        abort(400);
    }

    App::setLocale($locale);

    return $next($request);
}

 

6 - Đặt tất cả các route cần dùng đa ngôn ngữ vào trong group

Route::group(['middleware' => 'localization'], function () {
   
 //---- cac route đa ngôn ngữ phải đặt trong này
    Route::get('/tool/md5.html', [ToolController::class,'Md5'])->name('frontend.tool.md5');


});

 

7 - Trên giao diện web làm thêm cái cờ để đổi ngôn ngữ:

https://www.flaticon.com/free-icon/south-korea_330591?related_id=330591#

<a href="/lang/en"><img src="/assets/img/uk.png" style="width:16px" /> English</a>
<a href="/lang/vi"><img src="/assets/img/vi.png" style="width:16px" /> Vietnamese</a>

8 - Trên các view dùng cấu trúc translate sau để dịch ngôn ngữ

{{__('tool.title_md5_generator')}}

Cái chữ tool. Màu xanh là tên file ngôn ngữ được tạo trong thư mục lang/

OK đã xong, giờ trải nghiệm thử nhé.

 

Nguồn: zezo.dev