Trong Laravel, ngôn ngữ được setup trong thư mục resources/lang
Mỗi từ trong ngôn ngữ sẽ được lưu vào mảng ARRAY dạng KEY => VALUE.
Tạo một ngôn ngữ mới
Step 1: tạo folder tương ứng với ngôn ngữ trong thư mục resources/lang
├───lang
│ ├───en
│ │ auth.php
│ │ pagination.php
│ │ passwords.php
│ │ validation.php
│ │ sunshine.php -> Các từ trong sunshine sử dung ngôn ngữ ENGLISH
│ │
│ └───vi
│ auth.php
│ pagination.php
│ passwords.php
│ validation.php
│ sunshine.php -> Các từ trong sunshine sử dung ngôn ngữ VIỆT
Nội dung file resources/lang/en/sunshine.php
<?php
return [
'welcome' => "Welcome everybody to SUNSHINE's SHOP!",
];
Nội dung file resources/lang/vi/sunshine.php
<?php
return [
'welcome' => "Chào mừng các bạn đến với cửa hàng SUNSHINE!",
];
Step 2: setting ngôn ngữ mặc định được sử dụng trong Laravel
Hiệu chỉnh file config/app.php
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'vi',
// Bổ sung thêm danh sách các ngôn ngữ
'locales' => ['vi', 'en'],
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
Sau khi hiệu chỉnh config, cần chạy câu lệnh sau để clear CONFIG CACHE của Laravel
php artisan config:cache
Step 3: thay thế các từ bằng hàm magic function của Laravel __('TenFileArray.Key')
Ví dụ: bổ sung thêm dòng chào mừng, áp dụng Đa ngôn ngữ trên trang Index của Frontend
Hiệu chỉnh file resources/views/frontend/index.blade.php
{{-- View này sẽ kế thừa giao diện từ `frontend.layouts.master` --}}
@extends('frontend.layouts.master')
{{-- Thay thế nội dung vào Placeholder `title` của view `frontend.layouts.master` --}}
@section('title')
Shop Hoa tươi - Sunshine
@endsection
{{-- Thay thế nội dung vào Placeholder `custom-css` của view `frontend.layouts.master` --}}
@section('custom-css')
@endsection
{{-- Thay thế nội dung vào Placeholder `main-content` của view `frontend.layouts.master` --}}
@section('main-content')
<div class="container text-center">
<h1>{{ __('sunshine.welcome') }}</h1>
</div>
<!-- Slider -->
@include('frontend.widgets.homepage-slider')
<!-- Banner -->
@include('frontend.widgets.homepage-banner', [$data = $ds_top3_newest_loaisanpham])
<!-- Product -->
@include('frontend.widgets.product-list', [$data = $danhsachsanpham])
@endsection
{{-- Thay thế nội dung vào Placeholder `custom-scripts` của view `frontend.layouts.master` --}}
@section('custom-scripts')
@endsection
Step 4: Tạo middleware quản lý việc thay đổi ngôn ngữ
php artisan make:middleware Locale
- Nội dung file
app/Http/Middleware/Locale.php
<?php
namespace App\Http\Middleware;
use Closure;
use App;
use Config;
use Session;
class Locale
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$raw_locale = Session::get('locale');
if (in_array($raw_locale, Config::get('app.locales'))) {
$locale = $raw_locale;
} else $locale = Config::get('app.locale');
App::setLocale($locale);
return $next($request);
}
}
- Khai báo sử dụng Middleware
Locale cho toàn chương trình
- Hiệu chỉnh file
app/Http/Kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
...
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Locale::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
...
}
Step 5: Tạo route cho phép chuyển đổi ngôn ngữ
- Hiệu chỉnh file
routes/web.php
Route::get('setLocale/{locale}', function ($locale) {
if (in_array($locale, Config::get('app.locales'))) {
Session::put('locale', $locale);
}
return redirect()->back();
})->name('app.setLocale');
Step 6: Hiệu chỉnh giao diện cho phép Người dùng tự chuyển đổi ngôn ngữ
- Hiệu chỉnh file
resources\views\frontend\layouts\partials\header.blade.php
<header class="header-v4">
<!-- Header desktop -->
<div class="container-menu-desktop">
<!-- Topbar -->
<div class="top-bar">
<div class="content-topbar flex-sb-m h-full container">
<div class="left-top-bar">
Free shipping for standard order over $100
</div>
<div class="right-top-bar flex-w h-full">
<a href="#" class="flex-c-m trans-04 p-lr-25">
Help & FAQs
</a>
<a href="#" class="flex-c-m trans-04 p-lr-25">
My Account
</a>
<a href="{{ route('app.setLocale', ['locale' => 'en']) }}" class="flex-c-m trans-04 p-lr-25">
EN
</a>
<a href="{{ route('app.setLocale', ['locale' => 'vi']) }}" class="flex-c-m trans-04 p-lr-25">
VI
</a>
<a href="#" class="flex-c-m trans-04 p-lr-25">
USD
</a>
</div>
</div>
</div>
...
</header>
Step 7: Kiểm tra
Chạy URL để kiểm tra: http://sunshine.local/
|