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.
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.
Semua file terjemahan ada di lang/. Di Laravel 9+, folder ini ada di root project. Di versi sebelumnya ada di resources/lang/.
Buat folder sesuai kode locale: en/ untuk Inggris, id/ untuk Indonesia, ja/ untuk Jepang, dan seterusnya.
Setiap file adalah PHP yang mengembalikan array asosiatif. Contoh: messages.php, auth.php, validation.php.
Laravel juga mendukung file JSON per locale di root folder lang/. Contoh: id.json, en.json. Format ini lebih cocok untuk key yang panjang.
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.
Buat file PHP untuk setiap bahasa yang ingin kamu dukung. Kita mulai dengan Inggris dan Indonesia.
Tentukan bahasa default aplikasimu. Ini akan digunakan jika tidak ada locale yang secara aktif diset.
Gunakan helper __() atau directive @lang() di Blade untuk menampilkan teks terjemahan.
Buat fitur "ganti bahasa" yang bisa dipilih pengguna. Simpan preferensi bahasa di session, lalu ubah locale setiap request menggunakan Middleware.
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:
$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.
Laravel bisa otomatis memilih antara teks tunggal atau jamak berdasarkan angka. Pisahkan dengan tanda | dan gunakan helper trans_choice().
Dengan format JSON, kamu bisa menggunakan string asli sebagai key. Cocok untuk teks panjang atau ketika kamu tidak mau menghafal nama key.
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 |
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.
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.
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.
No comments:
Post a Comment