Laravel Localization | Membuat Fitur Multi Bahasa

MahirKoding – Dalam laravel, membuat fitur multi bahasa bukanlah hal yang sulit. Disini, kita dapat menggunakan salah satu fitur yang sudah tersediakan dari Laravel yaitu localization. Untuk penggunaan dari laravel localization sendiri pun tidaklah sulit. Kita hanya perlu mendifinisikan list of string dalam beberapa bahasa kemudian memanggilnya dalam view. Selengkapnya akan dijelaskan di bawah.

Semua string akan disimpan di folder resources/lang/ dengan format {country_code}/{file}.

Misalnya, dalam tutorial ini saya akan mencoba membuat halaman registrasi.

Pertama, yang harus dilakukan adalah mendaftarkan atau membuat list string yang akan digunakan dalam page yang akan dibuat. Misalnya saya sudah buat sebuah file dengan nama register.php dan sudah saya kelompokkan dalam folder en (english) dan id (indonesia). Setiap string, disusun dalam format associative array (mempunyai key dan value). Lebih kurang, isinya seperti ini.

resources/lang/en/register.php

<?php
return [
    "title" => "Registration Form",
    "intro" => "Hello, welcome to registration form. Please fill the form below!",
    "forms" => [
        "username" => "Your Username",
        "password" => "Your Passowrd",
        "email" => "Your Email Address",
    ],
    "submit" => "Register"
];

resources/lang/id/register.php

<?php
return [
    "title" => "Halaman Registrasi",
    "intro" => "Selamat datang di halaman registrasi, silahkan isi form di bawah ini!",
    "forms" => [
        "username" => "Username Anda",
        "password" => "Kata Sandi Anda",
        "email" => "Alamat Surel Anda",
    ],
    "submit" => "Daftar"
];

Pastikan name key dalam array yang kamu buat di file en/register.php sama dengan yang di id/register.php agar tidak ada yang miss atau hilang saat pemanggilan di view.

Lalu, sekarang kita akan coba melakukan pemanggilan dari view. Misalnya, saya sudah buat file blade dengan nama register.blade.php. Untuk melakukan pemanggilan string yang telah kita definisikan dalam file lang, kamu bisa menggunakan 2 cara.

//cara pertama
@lang("namafile.arraykey")

//cara kedua
{{ __("namafile.arraykey") }}

Sebagai contoh, file register.blade.php telah saya susun seperti ini :

<!DOCTYPE html>
<html>
<head>
    <title>Sample</title>
</head>
<body>
    <h2>@lang("register.title")</h2>
    <h4>@lang("register.intro")</h4>
    <p>
        @lang("register.forms.username") : <input type="text">
    </p>
    <p>
        @lang("register.forms.password") : <input type="password">
    </p>
    <p>
        @lang("register.forms.email") : <input type="email">
    </p>
    <p>
        <input type="submit" value="@lang("register.submit")">
    </p>
</body>
</html>

Maka hasilnya akan seperti ini :

Secara default, hasil yang akan muncul akan keluar dalam bahasa inggris. Jika kita ingin mengganti default bahasanya, silahkan ganti di file config/app.php lalu ganti “locale” sesuai dengan folder bahasa yang diinginkan (resource/lang/xx). Pastikan foldernya telah tersedia dan stringnya sudah dilengkapi semuanya.

Sampai tahap ini, kita sudah bisa menerapkan laravel localization, tapi kita masih belum membuat fitur ganti bahasanya. Untuk dapat mengganti active language, kamu hanya perlu memanggil method di bawah ini :

//xx adalah prefix country atau nama folder yang telah kamu buat dalam resource/lang/
App::setLocale("xx");

Sebagai contoh, saya akan mencoba memanggil fungsi ini di routing.

router/web.php

Route::get('/register/{locale}', function ($locale) {
    App::setLocale($locale);
    return view('register');
});

Jadi, saat user mengakses routing /register/en maka akan berbentuk bahasa inggris, begitu pula sebaliknya jika yang diakses adalah /register/id maka akan keluar bahasa indonesia.

Note : Untuk improvisasi, lebih baik method setLocale() dipanggil di middleware saja agar kamu tidak perlu memanggil App:setLocale() di setiap routing. Kombinasikan dengan session atau cookies untuk menyimpan pilihan bahasa yang user pilih. Lebih kurang, middleware yang saya buat seperti ini :

<?php

namespace App\Http\Middleware;
use Request, App, View;
use Closure;

class LanguageMiddleware
{
    public function handle($request, Closure $next)
    {
        App::setLocale($request->session()->get("active_lang"));
        return $next($request);
    }
}

Demikianlah tutorial singkat Laravel Localization | Membuat Fitur Multi Bahasa di Laravel. Semoga bisa bermanfaat 😀