ahmadajah03 Sat Dec 2020 2 years ago

Cara Membuat Website Multi Bahasa menggunakan Laravel Localization

Laravel menyediakan cara yang sangat mudah untuk melokalkan situs web kita. Dalam artikel ini saya akan memberi tahu Anda cara menerapkan pelokalan selangkah demi selangkah.

#Langkah 1

Pertama ketika pengguna memilih bahasa, kami menempatkan lokal (bahasa) pilihan pengguna dalam sesi [contoh en, fr, hi]

Route::get('setlocale/{locale}',function($lang){
       \Session::put('locale',$lang);
       return redirect()->back();   
});
for example - http://localhost/setlocale/en

#Langkah 2

Kedua Kami membutuhkan middleware untuk menerjemahkan halaman sesuai dengan lokal sesi kami (dipilih pengguna)

<?php

namespace App\Http\Middleware;

use Closure;
use Session;
use App;
use Config;
class LanguageSwitcher
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!Session::has('locale'))
         {
           Session::put('locale',Config::get('app.locale'));
        }
        App::setLocale(session('locale'));
        return $next($request);
    }
}

#Langkah 3

Ketiga kita meletakkan middleware ini di kernal.php routeMiddleware (app/Http/kernal.php)

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'language' => \App\Http\Middleware\LanguageSwitcher::class,        
    ];

Berikut adalah Language Switcher adalah middleware kami.

#langkah 4

Keempat, Untuk melayani middleware ini kita membutuhkan route group. jadi setiap permintaan melewati middleware ini.

Route::group(['middleware'=>'language'],function ()
{
    //your translation routes
});

Logika di middleware

Di middleware untuk setiap permintaan kami memeriksa apakah lokal disetel dalam sesi saat ini atau tidak. jika Sesi tidak memiliki lokal maka untuk permintaan saat ini kami menyetel lokal ke config locale berarti di lokal konfigurasi aplikasi Anda.

'locale' => 'en',  // config/app.php
 Session::put('locale',Config::get('app.locale')); // in middleware code we use Config method to get app configuration locale
App::setLocale(Session::get('locale')); // finally set this to app locale

lain jika kita memiliki lokal di sesi saat ini maka kita mengaturnya ke Lokal aplikasi

App::setLocale(Session::get('locale')); // set this to app locale

Akhirnya dengan menggunakan metode terjemahan kita akan mendapatkan terjemahan kita.

{{ __('messages.welcome') }}
{{ trans('messages.welcome') }}
/resources
    /lang
        /en
            messages.php
        /fr
            messages.php
        /hi
            messages.php

__ () atau trans() memberi Anda hasil yang sama.

__ () membutuhkan 3 argumen. 2 lainnya adalah opsional.

__(key,array,locale)
__('messages.welcome',[ 'name' => 'akash' ], 'fr')

Jika kita perlu meneruskan data dinamis apa pun ke terjemahan kita, maka kita perlu argumen kedua

// suppose messages.php
<?php

return [
 'welcome' => 'welcome :name',
];

trans('messages.welcome', [ 'name' => 'akash' ]); 
__('messages.welcome', [ 'name' => 'akash' ]);
both gives you "Hello akash"

Jika Anda membutuhkan terjemahan lokal tertentu maka kami menggunakan argumen ketiga

// suppose we need french translation
trans('messages.welcome', [ 'name' => 'akash' ], 'fr'); 
__('messages.welcome', [ 'name' => 'akash' ], 'fr');
both gives you "Bonjour akash"

Jika Anda menghadapi masalah apa pun. silahkan posting komentar. saya akan dengan senang hati membantu anda,

Terima kasih/

laravel