Cara Membuat Aplikasi Multi Bahasa (Localization) di Laravel

Membuat aplikasi yang mendukung lebih dari satu bahasa adalah kebutuhan yang semakin umum, terutama untuk aplikasi yang ditujukan ke pengguna dari berbagai negara. Laravel memiliki...

Cara Membuat Aplikasi Multi Bahasa (Localization) di Laravel

Membuat aplikasi yang mendukung lebih dari satu bahasa adalah kebutuhan yang semakin umum, terutama untuk aplikasi yang ditujukan ke pengguna dari berbagai negara. Laravel memiliki fitur Localization bawaan yang memudahkan kamu mengelola terjemahan teks tanpa harus mengubah kode di banyak tempat. Dalam tutorial ini, kita akan membuat aplikasi yang bisa beralih antara Bahasa Indonesia dan Bahasa Inggris.

Struktur File Terjemahan

Laravel menyimpan file terjemahan di folder lang/. Mulai Laravel 9, folder ini ada di root project. Jika belum ada, buat dengan:

php artisan lang:publish

Struktur folder yang akan kita buat:

lang/
โ”œโ”€โ”€ en/
โ”‚   โ”œโ”€โ”€ messages.php
โ”‚   โ””โ”€โ”€ auth.php
โ””โ”€โ”€ id/
    โ”œโ”€โ”€ messages.php
    โ””โ”€โ”€ auth.php

Membuat File Terjemahan PHP

Buat file lang/en/messages.php:

<?php

return [
    'welcome'       => 'Welcome to :app!',
    'greeting'      => 'Hello, :name!',
    'nav' => [
        'home'      => 'Home',
        'about'     => 'About',
        'contact'   => 'Contact',
        'products'  => 'Products',
    ],
    'product' => [
        'title'     => 'Product List',
        'not_found' => 'No products found.',
        'count'     => '{0} No products|{1} One product|[2,*] :count products',
    ],
];

Buat file lang/id/messages.php:

<?php

return [
    'welcome'       => 'Selamat datang di :app!',
    'greeting'      => 'Halo, :name!',
    'nav' => [
        'home'      => 'Beranda',
        'about'     => 'Tentang Kami',
        'contact'   => 'Kontak',
        'products'  => 'Produk',
    ],
    'product' => [
        'title'     => 'Daftar Produk',
        'not_found' => 'Tidak ada produk ditemukan.',
        'count'     => '{0} Tidak ada produk|{1} Satu produk|[2,*] :count produk',
    ],
];

Menggunakan Terjemahan di Blade

Gunakan helper __() atau directive @lang untuk menampilkan teks yang diterjemahkan:

<!-- Terjemahan sederhana -->
<h1>{{ __('messages.welcome', ['app' => config('app.name')]) }}</h1>

<!-- Dengan parameter nama -->
<p>{{ __('messages.greeting', ['name' => auth()->user()->name]) }}</p>

<!-- Akses nested array -->
<nav>
    <a href="/">{{ __('messages.nav.home') }}</a>
    <a href="/products">{{ __('messages.nav.products') }}</a>
</nav>

<!-- Pluralisasi -->
<p>{{ trans_choice('messages.product.count', $count, ['count' => $count]) }}</p>

Format JSON untuk Terjemahan Simpel

Laravel juga mendukung file JSON untuk terjemahan yang lebih simpel โ€” cocok untuk kalimat panjang:

// lang/id.json
{
    "Login": "Masuk",
    "Register": "Daftar",
    "Forgot your password?": "Lupa kata sandi?",
    "Remember me": "Ingat saya",
    "Email Address": "Alamat Email",
    "Password": "Kata Sandi"
}
// Penggunaan di Blade (key = teks bahasa Inggris)
{{ __('Login') }}
{{ __('Forgot your password?') }}

Mengatur Locale Aplikasi

Locale default dikonfigurasi di config/app.php:

'locale'          => env('APP_LOCALE', 'id'),
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),

Untuk mengubah locale secara dinamis di runtime:

use Illuminate\Support\Facades\App;

// Set locale
App::setLocale('en');

// Cek locale saat ini
App::getLocale(); // 'en'

// Cek apakah locale tertentu aktif
App::isLocale('id'); // true/false

Membuat Language Switcher

Buat route dan controller untuk mengganti bahasa:

// routes/web.php
Route::get('/lang/{locale}', function ($locale) {
    if (! in_array($locale, ['en', 'id'])) {
        abort(400, 'Locale tidak didukung.');
    }
    session(['locale' => $locale]);
    return redirect()->back();
})->name('lang.switch');

Buat middleware untuk mengaplikasikan locale dari session:

php artisan make:middleware SetLocale
<?php
// app/Http/Middleware/SetLocale.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;

class SetLocale
{
    public function handle(Request $request, Closure $next)
    {
        $locale = session('locale', config('app.locale'));
        App::setLocale($locale);

        return $next($request);
    }
}

Daftarkan middleware di bootstrap/app.php (Laravel 11) atau app/Http/Kernel.php (Laravel 10):

// bootstrap/app.php (Laravel 11)
->withMiddleware(function (Middleware $middleware) {
    $middleware->web(append: [
        \App\Http\Middleware\SetLocale::class,
    ]);
})

Tambahkan tombol switcher di Blade:

<div>
    <a href="{{ route('lang.switch', 'id') }}"
       class="{{ app()->getLocale() === 'id' ? 'font-bold' : '' }}">
        ID
    </a>
    |
    <a href="{{ route('lang.switch', 'en') }}"
       class="{{ app()->getLocale() === 'en' ? 'font-bold' : '' }}">
        EN
    </a>
</div>

Kesimpulan

Fitur Localization Laravel membuat implementasi multi bahasa menjadi sangat terstruktur. File PHP untuk grup terjemahan yang kompleks, file JSON untuk terjemahan sederhana, dan middleware untuk mengelola locale per session โ€” semuanya sudah disediakan oleh Laravel. Dengan pola ini, menambah bahasa baru cukup dengan membuat folder dan file terjemahan tanpa mengubah satu baris kode logika pun.

localization laravel multi bahasa laravel laravel translation laravel lang bahasa indonesia laravel language switcher laravel
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’