laravel localization | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: laravel localization

Sunday, April 12, 2026

laravel localization

📚 Seri Belajar Laravel Artikel 34 dari 50

Localization: Aplikasi
Multi Bahasa di Laravel

Bikin aplikasimu bisa "ngomong" dalam banyak bahasa — dari Indonesia, Inggris, sampai Arab. Panduan lengkap localization Laravel untuk mahasiswa yang serius jadi developer kelas dunia.

⏱️
Estimasi Baca
12 Menit
🎯
Level
Intermediate
📅
Update
2025
#Laravel #Localization #MultiBahasa #PHP #WebDev

Pernah nggak kamu membuka sebuah aplikasi, dan semua teksnya langsung menyesuaikan bahasa kamu secara otomatis? Bukan hanya menerjemahkan kata per kata, tapi benar-benar terasa seperti aplikasi itu "lahir" di negaramu. Itulah kekuatan Localization — dan di Laravel, fitur ini tersedia langsung out of the box, tinggal kamu eksplor. Sama seperti kamu belajar kirim email laravel mailable untuk komunikasi otomatis, localization adalah cara aplikasimu "berkomunikasi" dalam bahasa yang dipahami pengguna di seluruh dunia.

Sebagai mahasiswa informatika yang sedang belajar web development, ini adalah skill yang seringkali diremehkan — padahal aplikasi yang mampu berbicara dalam banyak bahasa punya nilai jual jauh lebih tinggi di mata klien maupun pengguna. Artikel ke-34 dalam seri 50 Artikel Belajar Laravel ini akan membimbing kamu dari nol sampai bisa membuat aplikasi multibahasa yang sesungguhnya.

🌐
Apa itu Laravel Localization?

Laravel Localization adalah fitur bawaan framework yang memungkinkan kamu mendefinisikan string teks dalam berbagai bahasa, lalu memanggil teks tersebut secara dinamis sesuai locale yang aktif. Dengan kata lain: kamu tulis teks sekali, definisikan dalam banyak bahasa, dan Laravel yang mengurus sisanya. Ini berbeda dari sekadar translate — ini arsitektur yang scalable untuk aplikasi global.

🗂️ Memahami Struktur Localization di Laravel

Bayangkan kamu membuka restoran internasional. Menu yang kamu sajikan sama, tapi kamu punya buku menu dalam Bahasa Indonesia, Inggris, dan Jepang. Ketika tamu dari Jepang datang, kamu kasih menu Jepang. Saat bule dari Amerika masuk, kamu keluarkan menu Inggris. Nah, itulah cara kerja localization di Laravel — satu konten, banyak "buku menu" berdasarkan bahasa pengguna.

Di Laravel, file-file bahasa disimpan di direktori lang/. Setiap bahasa punya folder tersendiri.

📁 Struktur Direktori Bahasa di Laravel
1
Folder lang/ sebagai root

Semua file terjemahan ada di lang/. Di Laravel 9+, folder ini ada di root project. Di versi sebelumnya ada di resources/lang/.

2
Sub-folder per bahasa

Buat folder sesuai kode locale: en/ untuk Inggris, id/ untuk Indonesia, ja/ untuk Jepang, dan seterusnya.

3
File PHP berisi array terjemahan

Setiap file adalah PHP yang mengembalikan array asosiatif. Contoh: messages.php, auth.php, validation.php.

4
Format JSON (opsional tapi recommended)

Laravel juga mendukung file JSON per locale di root folder lang/. Contoh: id.json, en.json. Format ini lebih cocok untuk key yang panjang.

📁 Struktur folder localization
lang/
├── en/
│   ├── messages.php
│   ├── auth.php
│   └── validation.php
├── id/
│   ├── messages.php
│   ├── auth.php
│   └── validation.php
├── en.json   <-- format JSON
└── id.json   <-- format JSON
💡
TIPS: Laravel 9+ vs Versi Lama

Di Laravel 9+, folder lang/ berada di root project. Di Laravel 8 ke bawah, cari di resources/lang/. Kalau folder lang/ belum ada, kamu bisa buat manual atau jalankan php artisan lang:publish untuk meng-generate file bawaan Laravel.

⚙️ Cara Implementasi Localization Laravel: Step by Step

Sekarang masuk ke praktiknya. Ini seperti menyiapkan sistem kirim email laravel mailable — ada langkah setup, ada cara panggilnya, dan ada cara customisasinya. Kita akan bangun sistem localization dari awal.

1
Buat File Terjemahan

Buat file PHP untuk setiap bahasa yang ingin kamu dukung. Kita mulai dengan Inggris dan Indonesia.

📄 lang/en/messages.php
<?php

return [
    'welcome'   => 'Welcome to our application!',
    'greeting'  => 'Hello, :name!',
    'home'      => 'Home',
    'about'     => 'About Us',
    'contact'   => 'Contact',
    'logout'    => 'Logout',
];
📄 lang/id/messages.php
<?php

return [
    'welcome'   => 'Selamat datang di aplikasi kami!',
    'greeting'  => 'Halo, :name!',
    'home'      => 'Beranda',
    'about'     => 'Tentang Kami',
    'contact'   => 'Kontak',
    'logout'    => 'Keluar',
];
2
Set Default Locale di config/app.php

Tentukan bahasa default aplikasimu. Ini akan digunakan jika tidak ada locale yang secara aktif diset.

⚙️ config/app.php
// Set bahasa default aplikasi
'locale' => 'id',

// Fallback jika terjemahan tidak ditemukan
'fallback_locale' => 'en',

// Locale untuk class Faker (testing)
'faker_locale' => 'id_ID',
3
Panggil Terjemahan di Blade & Controller

Gunakan helper __() atau directive @lang() di Blade untuk menampilkan teks terjemahan.

🖥️ Di Blade Template
<!-- Cara 1: Helper __() -->
<h1>{{ __('messages.welcome') }}</h1>

<!-- Cara 2: @lang directive -->
<p>@lang('messages.welcome')</p>

<!-- Dengan parameter :name -->
<p>{{ __('messages.greeting', ['name' => $user->name]) }}</p>
<!-- Output: Halo, Budi! -->
🎮 Di Controller (PHP)
use Illuminate\Support\Facades\Lang;

// Cara 1: Facade Lang
$message = Lang::get('messages.welcome');

// Cara 2: Helper __() juga bisa di PHP
$message = __('messages.welcome');

// Cek apakah terjemahan tersedia
if (Lang::has('messages.welcome')) {
    // terjemahan tersedia
}
4
Ganti Bahasa Secara Dinamis

Buat fitur "ganti bahasa" yang bisa dipilih pengguna. Simpan preferensi bahasa di session, lalu ubah locale setiap request menggunakan Middleware.

🎛️ app/Http/Controllers/LanguageController.php
class LanguageController extends Controller
{
    public function switchLanguage(Request $request, string $locale)
    {
        // Validasi locale yang diizinkan
        $supported = ['id', 'en', 'ja'];

        if (!in_array($locale, $supported)) {
            abort(400, 'Locale tidak valid');
        }

        // Simpan ke session
        $request->session()->put('locale', $locale);

        return redirect()->back();
    }
}
🔄 app/Http/Middleware/SetLocale.php
class SetLocale
{
    public function handle(Request $request, Closure $next)
    {
        // Ambil locale dari session, fallback ke config
        $locale = $request->session()->get(
            'locale',
            config('app.locale')
        );

        // Set locale untuk request ini
        App::setLocale($locale);

        return $next($request);
    }
}
INSIGHT: Daftarkan Middleware ke Kernel

Setelah membuat middleware SetLocale, kamu perlu mendaftarkannya. Di Laravel 10 ke bawah, tambahkan ke $middlewareGroups['web'] di app/Http/Kernel.php. Di Laravel 11+, daftarkan di bootstrap/app.php:

->withMiddleware(function (Middleware $middleware) {
    $middleware->web(append: [SetLocale::class]);
})

🚀 Fitur Lanjutan: Pluralization, JSON & Fallback

Kalau tadi adalah fondasi, sekarang kita naik ke level yang lebih serius. Aplikasi dunia nyata punya kebutuhan yang lebih kompleks — misalnya, teks yang berubah tergantung jumlah (singular vs plural), atau lokasi terjemahan dalam format JSON yang lebih fleksibel. Ini mirip seperti saat kamu mengkonfigurasi kirim email laravel mailable dengan berbagai kondisi dan template — localization pun punya "kondisional" serupa.

📊 Pluralization — Teks Singular & Plural

Laravel bisa otomatis memilih antara teks tunggal atau jamak berdasarkan angka. Pisahkan dengan tanda | dan gunakan helper trans_choice().

📄 lang/id/messages.php — Pluralization
return [
    // Singular | Plural
    'apple'     => 'Ada :count buah apel|Ada :count buah apel',
    'messages'  => '{1} Ada :count pesan|[2,*] Ada :count pesan baru',
    'files'     => '{0} Tidak ada file|{1} 1 file|[2,*] :count file',
];

// Di controller / blade:
echo trans_choice('messages.files', 0);  // Tidak ada file
echo trans_choice('messages.files', 1);  // 1 file
echo trans_choice('messages.files', 5);  // 5 file
📋 Format JSON — Alternatif Modern

Dengan format JSON, kamu bisa menggunakan string asli sebagai key. Cocok untuk teks panjang atau ketika kamu tidak mau menghafal nama key.

📄 lang/id.json
{
    "Welcome to our application!": "Selamat datang di aplikasi kami!",
    "Hello, :name!": "Halo, :name!",
    "Please verify your email address.": "Silakan verifikasi alamat email kamu."
}

// Cara memanggilnya di Blade:
{{ __("Welcome to our application!") }}
// Output: Selamat datang di aplikasi kami!
🔥
FAKTA: Localization Meningkatkan Konversi 72%

Studi dari Common Sense Advisory menemukan bahwa 72% konsumen lebih mungkin membeli produk jika informasinya tersedia dalam bahasa mereka sendiri. Jadi localization bukan sekadar fitur "nice to have" — ini adalah fitur yang langsung berdampak pada bisnis!

📊 Perbandingan: PHP vs JSON Translation Files

Aspek 📄 PHP Files 📋 JSON Files
Format Key Singkat: messages.welcome Teks asli sebagai key
Struktur Nested array (bisa bersarang) Flat (satu level)
Cocok untuk Proyek terstruktur, tim besar Teks UI pendek, integrasi tools
Dukungan Tools ⚠️ Terbatas ✅ Luas (i18n tools)
Kecepatan Akses ✅ Lebih cepat (di-cache) Sedikit lebih lambat
Rekomendasi Validasi & Auth UI Labels & Buttons
🧠 Strategi Terbaik: Kombinasi Keduanya

Di proyek nyata, gunakan pendekatan hybrid: gunakan file PHP untuk pesan validasi, autentikasi, dan notifikasi sistem yang terstruktur — dan gunakan file JSON untuk label UI umum seperti tombol, navigasi, dan heading halaman. Kombinasi ini memberikan kamu kecepatan sekaligus fleksibilitas.

PHP: messages, auth, validation
JSON: navbar, buttons, labels
⚠️
PERHATIAN: Jangan Lupa Escape HTML

Saat kamu menyimpan HTML di dalam terjemahan (misalnya teks dengan tag <strong>), gunakan {!! __('messages.key') !!} (double curly braces tidak akan escape HTML). Tapi hati-hati — jangan gunakan ini untuk input dari user karena rentan XSS!

🎯 Studi Kasus: Tombol Ganti Bahasa di Navbar

Sekarang kita rakit semua bagian menjadi fitur yang benar-benar bisa dipakai. Ini adalah pola yang paling sering dipakai di aplikasi multibahasa — tombol switcher bahasa di navbar, mirip seperti cara kamu membuat tombol "kirim ulang email" di sistem kirim email laravel mailable kamu.

🖥️ resources/views/layouts/navbar.blade.php (sebagian)
<!-- Dropdown Switcher Bahasa -->
<div class="dropdown">
    <button class="btn btn-outline-light dropdown-toggle" 
            data-bs-toggle="dropdown">
        🌐 {{ strtoupper(app()->getLocale()) }}
    </button>
    <ul class="dropdown-menu">
        @foreach(['id' => '🇮🇩 Indonesia', 'en' => '🇺🇸 English'] as $locale => $label)
            <li>
                <a class="dropdown-item 
                    {{ app()->getLocale() === $locale ? 'active' : '' }}"
                   href="{{ route('lang.switch', $locale) }}">
                    {{ $label }}
                </a>
            </li>
        @endforeach
    </ul>
</div>

<!-- Di routes/web.php: -->
Route::get('/lang/{locale}', [LanguageController::class, 'switchLanguage'])
    ->name('lang.switch');
💡
TIPS: Package Tambahan yang Worth It

Untuk proyek serius, pertimbangkan package Laravel Localization oleh mcamara (mcamara/laravel-localization). Package ini menambahkan URL-based locale switching (contoh: /id/dashboard, /en/dashboard) yang jauh lebih SEO-friendly! Install via Composer dan ikuti dokumentasinya.

🏁 KESIMPULAN

Aplikasimu Sekarang Bisa
"Ngomong" Banyak Bahasa!

Di artikel ini kamu sudah belajar cara kerja sistem localization Laravel dari A sampai Z: mulai dari struktur direktori, cara memanggil terjemahan di Blade, membuat middleware untuk switch locale, hingga fitur lanjutan seperti pluralization dan format JSON. Sama seperti kamu menguasai kirim email laravel mailable untuk otomasi komunikasi, localization adalah senjata berikutnya untuk membuat aplikasimu benar-benar siap menghadapi pasar global.

📌 Poin Kunci yang Wajib Diingat:
  • File bahasa ada di lang/{locale}/ (PHP) atau lang/{locale}.json
  • Gunakan helper __() atau @lang() untuk menampilkan terjemahan
  • Simpan preferensi bahasa di session, ubah locale via Middleware
  • Gunakan trans_choice() untuk teks singular/plural
  • Kombinasikan PHP + JSON files untuk struktur optimal

Ini adalah bagian dari seri 50 Artikel Belajar Laravel yang dirancang untuk membawa kamu dari pemula sampai mahir. Kalau artikel ini bermanfaat, share ke teman sekelas kamu — siapa tau mereka juga lagi berjuang dengan hal yang sama! 🚀

#Laravel #Localization #MultiBahasa #PHP #BelajarLaravel #WebDevelopment #i18n #InformatikaTips
📚 Navigasi Seri 50 Artikel Belajar Laravel
← Artikel Sebelumnya
Artikel 33
Laravel Storage: Manajemen File yang Fleksibel
📁 File System Storage
Artikel Selanjutnya →
Artikel 35
Blade Components & Slots: UI yang Modular dan Reusable
🧩 Blade Components

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux