Membuat Website Multi Language dengan Laravel9 min read


Ketika kita membuat sebuah website yang akan banyak diakses oleh pengguna dari berbagai negara. Maka salah satu fitur yang wajib ada adalah fitur multi language atau multi bahasa, fitur ini mungkin bisa kita skip jika kita membuat sebuah aplikasi dalam bahasa Inggris, tapi ketika kita ingin lebih spesifik menargetkan user dari negara-negara tertentu (Misal: Indonesia, Arab atau China) maka saya rasa fitur ini sudah sangat wajib sekali untuk ada.

Di Laravel, untuk membuat fitur multi language ini kita bisa menggunakan fitur bawaan Laravel bernama Localization.

Contoh kasus kali ini kita akan membuat satu halaman seperti dibawah, abaikan tampilannya yang terlalu polos, kita fokus ke Localization-nya saja šŸ˜€ Walaupun pada contoh kasus kita hanya akan mencoba di 1 halaman, jika teman-teman faham maka untuk implementasi di halaman lain tidak akan sulit.

Oh iya, jika teman-teman ingin cek source code yang sudah jadi, saya share juga disini.

Persiapan

Pertama, siapkan project laravel seperti biasa dengan menjalankan perintah dibawah pada Terminal:

Pada contoh ini saya menggunakan Laravel 5.8, jadi jika suatu saat nanti Laravel sudah update Major (Apa itu Major? Silahkan baca-baca Mengenal Semantic Versioning) dan tutorial ini jadi tidak jalan. Silahkan kabari saya untuk saya update artikelnya.

Oh iya saya asumsikan teman-teman sudah faham basic Laravel ya mulai dari Controller, Route, Middleware, View, dsb.

Membuat Halaman Depan

Setelah selesai inisiasi project-nya, selanjutnya kita akan membuat/mengubah halaman depan dengan mengubah file resources/views/welcome.blade.php menjadi seperti ini:

Coba kita perhatikan baris 32, disitu kita memanggil __('home.title') , itu adalah helper untuk memanggil teks yang ada di file resources/lang/{locale-code}/home.php dengan key title.

Jika sekarang kita buka halamannya maka hanya akan tampil seperti ini:

Selanjutnya adalah kita harus membuat file resources/lang/en/home.php dengan isi sebagai berikut:

Jika kita refresh halaman tadi, maka sekarang akan menjadi seperti ini:

Menyiapkan Bahasa baru

Mungkin akan muncul pertanyaan:

Kenapa direktorinya mengarah ke resources/lang/en/namafile.php, kenapa harus en?

Jawabannya adalah karena konfigurasi default locale di file config/app.phpĀ adalah en.

Maka untuk menambahkan bahasa baru, kita cukup melakukan:

  1. Kita harus membuat direktori untuk bahasa baru yang akan kita tambahkan. Karena pada contoh tutorial kali ini kita akan menambahkan Bahasa Indonesia, maka tinggal copy saja folder en tadi dengan nama folder id.
  2. Ubah file resources/lang/id/home.php menjadi seperti ini:
  3. Ubah nilai locale di file config/app.php tadi menjadi id.

Sampai sini silahkan coba refresh halaman tadi, jika tidak ada masalah maka akan berubah menjadi Bahasa Indonesia seperti ini.

Membuat Fitur Switch Language

Nah selanjutnya adalah kita membuat fitur switch language atau pindah bahasa. Inti pada bagian ini adalah kita harus mengubah value locale yang ada di config/app.php tadi menjadi sesuai dengan locale/bahasa yang dipilih. Tapi nanti nilai locale yang dipilih user akan kita simpan di session.

Pertama kita harus membuat code untuk menyimpan nilai locale yang dipilih oleh user ke session.

Buat controller dengan menjalankan perintah dibawah pada Terminal:

Kemudian tambahkan method untuk switch language seperti dibawah:

Jangan lupa tambahkan juga di Route:

Selanjutnya adalah kita harus membuat Middleware untuk set nilai locale yang ada di config tadi.

Jalankan perintah dibawah di Terminal:

Kemudian kita ubah file app/Http/Middleware/LocalizationMiddleware.php menjadi seperti ini:

Kita registrasi Middleware diatas dan 1 Middleware lain ke Global Middleware di app/Http/Kernel.php (perhatikan baris 22 dan 23).

Selanjutnya kita tambahkan link/menu untuk switch language tadi, terserah teman-teman ingin menyimpannya dimana. Pada contoh disini kita akan menambahkan pada navbar di bagian kanan atas. Silahkan ubah file welcome.blade.php menjadi seperti ini (perhatikan baris 25 dan 26):

Fungsi app()->getLocale()Ā  diatasĀ adalah untuk mendapatkan locale yang sedang aktif.

Testing

Jika tidak ada masalah, harusnya semua berjalan seperti pada gambar dibawah:

Selanjutnya Apa?

Selanjutnya adalah silahkan implementasi di halaman lain, oh iya pada folder tadi kita lihat juga ada banyak file lain seperti auth.php, pagination.php, passwords.php dan validation.php. Silahkan ubah isinya sesuai dengan yang diinginkan.

Jika ingin menambahkan bahasa lain, silakan untuk lakukan hal yang sama lagi seperti diatas.

Penutup

Sekian artikel kali ini, mohon maaf jika ada kekurangan. Bila ada yang kurang jelas silahkan untuk berkomentar pada kolom komentar dibawah.

Terima kasih šŸ™‚