Membuat aplikasi web yang dapat diakses oleh pengguna dari seluruh dunia adalah impian banyak pengembang. Salah satu kunci untuk mencapai tujuan ini adalah dengan menerapkan localization atau pelokalan. Laravel, framework PHP yang populer, menyediakan fitur localization yang kuat dan mudah digunakan. Dalam artikel ini, kita akan membahas secara mendalam tentang Laravel Localization: Membuat Aplikasi Multi-Bahasa dengan Mudah, mulai dari dasar hingga penerapan praktis. Mari kita mulai!
1. Mengapa Laravel Localization Penting untuk Aplikasi Anda? (Pentingnya Aplikasi Multi Bahasa)
Sebelum kita masuk ke detail teknis, mari kita pahami mengapa localization sangat penting. Bayangkan Anda memiliki aplikasi e-commerce yang sukses di Indonesia. Dengan memperluas jangkauan ke pasar internasional, Anda berpotensi meningkatkan pendapatan secara signifikan. Namun, jika aplikasi Anda hanya tersedia dalam bahasa Indonesia, Anda akan kehilangan banyak pelanggan potensial.
Localization tidak hanya tentang menerjemahkan teks. Ini juga mencakup penyesuaian format tanggal, mata uang, dan bahkan gambar agar sesuai dengan budaya dan preferensi pengguna lokal. Dengan menyediakan pengalaman pengguna yang disesuaikan dengan bahasa dan budaya mereka, Anda dapat meningkatkan kepuasan pelanggan, meningkatkan loyalitas, dan memperluas pasar Anda secara global.
Berikut beberapa alasan pentingnya implementasi localization menggunakan Laravel Localization:
- Memperluas Jangkauan Pasar: Menjangkau lebih banyak pengguna di seluruh dunia.
- Meningkatkan Pengalaman Pengguna: Membuat pengguna merasa lebih nyaman dan terlibat.
- Membangun Kepercayaan: Menunjukkan bahwa Anda peduli dengan pengguna dari berbagai latar belakang.
- Meningkatkan SEO: Meningkatkan visibilitas di mesin pencari untuk berbagai bahasa.
- Keunggulan Kompetitif: Membedakan aplikasi Anda dari pesaing yang tidak mendukung localization.
2. Konfigurasi Dasar Laravel Localization (Langkah Awal Konfigurasi)
Laravel secara default mendukung localization. Langkah pertama adalah mengkonfigurasi aplikasi Anda untuk mendukung bahasa yang berbeda. Berikut adalah langkah-langkah dasar yang perlu Anda ikuti:
-
Mengatur Locale Default: Buka file
config/app.php
dan temukan opsilocale
. Opsi ini menentukan bahasa default aplikasi Anda. Misalnya, untuk mengatur bahasa Indonesia sebagai bahasa default, ubah nilainya menjadi'id'
.'locale' => 'id',
-
Mengatur Locale Cadangan (Fallback Locale): Opsi
fallback_locale
juga terletak di fileconfig/app.php
. Opsi ini menentukan bahasa yang akan digunakan jika terjemahan untuk bahasa yang diminta tidak ditemukan. Biasanya, bahasa Inggris digunakan sebagai bahasa fallback.'fallback_locale' => 'en',
-
Membuat Direktori Bahasa: Laravel mencari file bahasa di dalam direktori
resources/lang
. Buat direktori untuk setiap bahasa yang ingin Anda dukung. Misalnya, untuk bahasa Indonesia, buat direktoriresources/lang/id
. Untuk bahasa Inggris, buat direktoriresources/lang/en
.resources/ lang/ en/ id/
3. Membuat File Bahasa dengan Laravel (Membuat File Terjemahan)
Setelah mengkonfigurasi aplikasi Anda, langkah selanjutnya adalah membuat file bahasa. File-file ini berisi terjemahan untuk semua teks yang ingin Anda tampilkan dalam aplikasi Anda.
-
Struktur File Bahasa: File bahasa menggunakan format array PHP. Setiap elemen array mewakili sebuah terjemahan. Nama file biasanya merepresentasikan grup atau kategori terjemahan. Misalnya, Anda dapat membuat file
resources/lang/id/messages.php
untuk menyimpan terjemahan pesan-pesan umum.// resources/lang/id/messages.php return [ 'welcome' => 'Selamat Datang!', 'goodbye' => 'Sampai Jumpa!', 'login' => 'Masuk', 'register' => 'Daftar', ];
// resources/lang/en/messages.php return [ 'welcome' => 'Welcome!', 'goodbye' => 'Goodbye!', 'login' => 'Login', 'register' => 'Register', ];
-
Menyimpan Terjemahan: Simpan semua terjemahan Anda dalam file bahasa yang sesuai. Pastikan Anda memiliki file yang sesuai untuk setiap bahasa yang Anda dukung.
4. Menggunakan Fungsi __()
dan @lang
untuk Menampilkan Terjemahan (Menampilkan Teks yang Sudah Diterjemahkan)
Laravel menyediakan dua cara utama untuk menampilkan terjemahan di aplikasi Anda: fungsi __()
dan direktif @lang
Blade.
-
Fungsi
__()
: Fungsi__()
digunakan untuk mengambil terjemahan dari file bahasa dan menampilkannya. Fungsi ini menerima kunci terjemahan sebagai argumen pertama dan array opsional untuk mengganti placeholders dalam terjemahan.// Di dalam controller atau model $welcomeMessage = __('messages.welcome'); // Mengambil terjemahan 'Selamat Datang!'
// Di dalam controller atau model dengan placeholder $welcomeMessage = __('messages.welcome_user', ['name' => 'John']); // Mengambil terjemahan 'Selamat Datang, John!' dengan asumsi ada key 'welcome_user' yang mengandung `:name`
-
Direktif
@lang
Blade: Direktif@lang
Blade adalah cara yang lebih elegan untuk menampilkan terjemahan di dalam template Blade Anda.<!-- Di dalam template Blade --> <h1>@lang('messages.welcome')</h1> <!-- Menampilkan 'Selamat Datang!' --> <p>@lang('messages.welcome_user', ['name' => $user->name])</p>
5. Menggunakan Placeholders dalam Terjemahan Laravel (Substitusi Variabel dalam Teks)
Placeholders memungkinkan Anda untuk menyisipkan data dinamis ke dalam terjemahan Anda. Ini sangat berguna untuk menampilkan nama pengguna, jumlah item, atau informasi lain yang berubah-ubah.
-
Definisi Placeholder: Gunakan tanda
:name
dalam file bahasa Anda untuk mendefinisikan placeholder.// resources/lang/id/messages.php return [ 'welcome_user' => 'Selamat Datang, :name!', 'item_count' => 'Anda memiliki :count item di keranjang belanja.', ];
-
Mengganti Placeholder: Kirim array yang berisi nilai untuk setiap placeholder sebagai argumen kedua ke fungsi
__()
atau direktif@lang
.// Di dalam controller atau model $userName = 'Jane Doe'; $welcomeMessage = __('messages.welcome_user', ['name' => $userName]); // Menghasilkan 'Selamat Datang, Jane Doe!' $itemCount = 5; $itemMessage = __('messages.item_count', ['count' => $itemCount]); // Menghasilkan 'Anda memiliki 5 item di keranjang belanja.'
6. Mengelola Bahasa Pengguna (Menangani Preferensi Bahasa Pengguna)
Penting untuk memungkinkan pengguna memilih bahasa yang mereka inginkan. Berikut adalah beberapa cara untuk mengelola bahasa pengguna:
-
Menyimpan Bahasa di Sesi: Anda dapat menyimpan pilihan bahasa pengguna di sesi. Ini memungkinkan Anda untuk mempertahankan bahasa pilihan pengguna di seluruh sesi mereka.
// Di dalam controller public function changeLanguage($locale) { session(['locale' => $locale]); App::setLocale($locale); // Set locale saat ini return redirect()->back(); }
-
Menyimpan Bahasa di Cookie: Anda juga dapat menyimpan pilihan bahasa pengguna di cookie. Ini memungkinkan Anda untuk mempertahankan bahasa pilihan pengguna di seluruh kunjungan mereka, bahkan setelah mereka menutup browser mereka.
// Di dalam controller public function changeLanguage($locale) { Cookie::queue('locale', $locale, 60 * 24 * 30); // Simpan cookie selama 30 hari App::setLocale($locale); // Set locale saat ini return redirect()->back(); }
Anda perlu menambahkan middleware untuk membaca cookie dan mengatur locale:
// app/Http/Middleware/SetLocale.php namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesApp; use IlluminateSupportFacadesCookie; class SetLocale { public function handle($request, Closure $next) { if (Cookie::has('locale')) { App::setLocale(Cookie::get('locale')); } return $next($request); } }
Kemudian daftarkan middleware di
app/Http/Kernel.php
di bagian$middlewareGroups
atau$routeMiddleware
-
Deteksi Bahasa Otomatis: Anda dapat menggunakan header
Accept-Language
dari permintaan HTTP untuk mendeteksi bahasa yang disukai pengguna. Ini adalah cara yang bagus untuk memberikan pengalaman pengguna yang mulus, tetapi pastikan untuk memberikan opsi bagi pengguna untuk memilih bahasa secara manual.// Di dalam middleware public function handle($request, Closure $next) { $locale = $request->getPreferredLanguage(['en', 'id']); // Daftar bahasa yang didukung App::setLocale($locale); return $next($request); }
Penting: Pastikan Anda menggunakan middleware yang sesuai untuk mengatur locale berdasarkan pilihan pengguna (sesi, cookie, atau deteksi otomatis) di setiap permintaan.
7. Menggunakan Library Pihak Ketiga untuk Laravel Localization (Mengembangkan Fitur Localization Lebih Lanjut)
Meskipun Laravel menyediakan fitur localization yang kuat, Anda mungkin ingin menggunakan library pihak ketiga untuk menambahkan fungsionalitas tambahan. Beberapa library populer termasuk:
- mcamara/laravel-localization: Library ini menyediakan rute untuk mengubah bahasa, tautan yang menghasilkan URL dengan locale, dan middleware untuk mendeteksi dan mengatur locale. Ini adalah solusi komprehensif untuk localization di Laravel.
- dimsav/laravel-translatable: Digunakan untuk model Eloquent yang memiliki atribut yang perlu diterjemahkan.
Menggunakan library ini dapat menyederhanakan pengembangan aplikasi multi-bahasa Anda dan menyediakan fitur-fitur canggih yang tidak tersedia secara default di Laravel. Pastikan untuk membaca dokumentasi library dengan cermat sebelum menggunakannya.
8. Mengelola Terjemahan Basis Data dengan Eloquent (Pelokalan Data Dinamis)
Selain menerjemahkan teks statis, Anda mungkin juga perlu menerjemahkan data yang disimpan di basis data. Laravel Eloquent memungkinkan Anda untuk mengelola terjemahan basis data dengan mudah.
-
Membuat Tabel Terjemahan: Buat tabel terpisah untuk setiap model yang perlu diterjemahkan. Tabel ini harus berisi kolom untuk locale, foreign key ke model utama, dan kolom untuk atribut yang diterjemahkan.
Misalnya, jika Anda memiliki model
Product
dengan atributname
dandescription
yang perlu diterjemahkan, Anda dapat membuat tabelproduct_translations
dengan kolomproduct_id
,locale
,name
, dandescription
. -
Menggunakan Relationships Eloquent: Definisikan relationship antara model utama dan tabel terjemahan. Gunakan relationship
hasMany
dari model utama ke tabel terjemahan.// app/Models/Product.php namespace AppModels; use IlluminateDatabaseEloquentModel; class Product extends Model { public function translations() { return $this->hasMany(ProductTranslation::class); } } // app/Models/ProductTranslation.php namespace AppModels; use IlluminateDatabaseEloquentModel; class ProductTranslation extends Model { protected $table = 'product_translations'; public $timestamps = false; protected $fillable = ['product_id', 'locale', 'name', 'description']; }
-
Mengakses Terjemahan: Gunakan relationship untuk mengakses terjemahan untuk bahasa tertentu.
// Di dalam controller $product = Product::find(1); $translation = $product->translations()->where('locale', App::getLocale())->first(); if ($translation) { $productName = $translation->name; $productDescription = $translation->description; } else { // Gunakan nilai default jika terjemahan tidak ditemukan $productName = $product->name; $productDescription = $product->description; }
Atau, Anda bisa membuat accessor di model
Product
:// app/Models/Product.php public function getNameAttribute() { $translation = $this->translations()->where('locale', App::getLocale())->first(); return $translation ? $translation->name : $this->attributes['name']; } public function getDescriptionAttribute() { $translation = $this->translations()->where('locale', App::getLocale())->first(); return $translation ? $translation->description : $this->attributes['description']; }
Kemudian Anda bisa mengaksesnya langsung:
// Di dalam controller $product = Product::find(1); $productName = $product->name; // Akan mengambil terjemahan jika ada, jika tidak, mengambil nama dari tabel products $productDescription = $product->description;
9. SEO Multi-Bahasa untuk Aplikasi Laravel (Optimasi Mesin Pencari untuk Berbagai Bahasa)
Menerapkan localization tidak hanya tentang menyediakan aplikasi Anda dalam berbagai bahasa. Anda juga perlu memastikan bahwa aplikasi Anda dioptimalkan untuk mesin pencari untuk setiap bahasa. Berikut adalah beberapa tips SEO multi-bahasa untuk aplikasi Laravel Anda:
-
Gunakan Atribut
hreflang
: Atributhreflang
memberi tahu mesin pencari tentang bahasa dan wilayah target dari halaman web Anda. Tambahkan atributhreflang
ke tag<link>
di bagian<head>
dari setiap halaman web Anda.<!-- Contoh atribut hreflang --> <link rel="alternate" hreflang="en" href="https://example.com/en/page" /> <link rel="alternate" hreflang="id" href="https://example.com/id/page" /> <link rel="alternate" hreflang="x-default" href="https://example.com/page" />
-
Gunakan URL yang Dilokalkan: Gunakan URL yang jelas dan mudah dibaca untuk setiap bahasa. Anda dapat menggunakan subdirektori (misalnya,
example.com/en/page
,example.com/id/page
) atau subdomain (misalnya,en.example.com
,id.example.com
).Gunakan
mcamara/laravel-localization
untuk mempermudah pengaturan route dengan locale. -
Terjemahkan Metadata: Terjemahkan judul halaman, deskripsi meta, dan tag
alt
gambar untuk setiap bahasa. Ini membantu mesin pencari memahami konten halaman Anda dan menampilkannya kepada pengguna yang tepat. -
Gunakan Sitemap XML Multi-Bahasa: Buat sitemap XML yang berisi URL untuk semua versi bahasa dari halaman web Anda. Ini membantu mesin pencari menemukan dan mengindeks semua konten Anda. Sertakan tag
<xhtml:link>
di setiap<url>
untuk menunjukkan versi bahasa alternatif. -
Pertimbangkan Penargetan Geografis: Jika Anda menargetkan wilayah geografis tertentu, gunakan Google Search Console untuk mengatur penargetan geografis Anda.
10. Tips Tambahan untuk Laravel Localization
Berikut beberapa tips tambahan untuk membantu Anda mengimplementasikan localization dengan sukses di aplikasi Laravel Anda:
- Gunakan Alat Terjemahan: Pertimbangkan untuk menggunakan alat terjemahan profesional atau layanan crowdsourcing untuk menerjemahkan teks Anda. Ini dapat membantu Anda memastikan bahwa terjemahan Anda akurat dan berkualitas tinggi.
- Uji Coba Localization: Uji coba localization Anda secara menyeluruh untuk memastikan bahwa semuanya berfungsi dengan benar. Minta penutur asli untuk meninjau terjemahan Anda dan memberikan umpan balik.
- Pertimbangkan Format Tanggal dan Mata Uang: Pastikan untuk menyesuaikan format tanggal dan mata uang agar sesuai dengan budaya dan preferensi pengguna lokal. Gunakan fungsi
Carbon
untuk memformat tanggal dan fungsiNumberFormatter
untuk memformat mata uang. - Gunakan Pluralisasi: Pastikan aplikasi Anda menangani pluralisasi dengan benar untuk setiap bahasa. Laravel menyediakan fungsi
trans_choice
untuk membantu Anda mengelola pluralisasi. - Dokumentasikan Proses Localization: Dokumentasikan proses localization Anda secara menyeluruh. Ini membantu Anda dan tim Anda untuk memahami bagaimana localization berfungsi dan bagaimana cara memeliharanya.
11. Contoh Implementasi Laravel Localization (Studi Kasus Sederhana)
Mari kita lihat contoh sederhana bagaimana menerapkan localization di aplikasi Laravel. Katakanlah kita memiliki tampilan welcome yang menampilkan pesan selamat datang.
-
Membuat File Bahasa:
// resources/lang/en/welcome.php return [ 'title' => 'Welcome!', 'message' => 'Welcome to our website!', ];
// resources/lang/id/welcome.php return [ 'title' => 'Selamat Datang!', 'message' => 'Selamat datang di website kami!', ];
-
Menampilkan Terjemahan di Blade:
<!-- resources/views/welcome.blade.php --> <!DOCTYPE html> <html> <head> <title>@lang('welcome.title')</title> </head> <body> <h1>@lang('welcome.title')</h1> <p>@lang('welcome.message')</p> <form action="{{ route('language.change') }}" method="POST"> @csrf <select name="locale" onchange="this.form.submit()"> <option value="en" {{ App::getLocale() == 'en' ? 'selected' : '' }}>English</option> <option value="id" {{ App::getLocale() == 'id' ? 'selected' : '' }}>Indonesia</option> </select> </form> </body> </html>
-
Membuat Route:
// routes/web.php use AppHttpControllersLanguageController; use IlluminateSupportFacadesRoute; Route::get('/', function () { return view('welcome'); }); Route::post('/language', [LanguageController::class, 'changeLanguage'])->name('language.change');
-
Membuat Controller:
// app/Http/Controllers/LanguageController.php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateSupportFacadesApp; use IlluminateSupportFacadesSession; class LanguageController extends Controller { public function changeLanguage(Request $request) { $request->validate([ 'locale' => 'required|string|in:en,id' // Tambahkan validasi untuk bahasa yang didukung ]); Session::put('locale', $request->locale); App::setLocale($request->locale); return redirect()->back(); } }
Dengan mengikuti langkah-langkah ini, Anda dapat dengan mudah menerapkan localization di aplikasi Laravel Anda. Contoh ini hanyalah permulaan. Anda dapat menerapkan teknik yang sama untuk menerjemahkan semua teks di aplikasi Anda, termasuk data basis data, pesan kesalahan, dan notifikasi.
12. Kesimpulan: Laravel Localization untuk Aplikasi yang Lebih Baik (Manfaat Implementasi Localization)
Laravel Localization: Membuat Aplikasi Multi-Bahasa dengan Mudah adalah kunci untuk membuka potensi global aplikasi web Anda. Dengan menyediakan pengalaman pengguna yang disesuaikan dengan bahasa dan budaya mereka, Anda dapat meningkatkan kepuasan pelanggan, meningkatkan loyalitas, dan memperluas pasar Anda secara global. Laravel menyediakan fitur localization yang kuat dan mudah digunakan yang memungkinkan Anda untuk menerapkan localization dengan mudah dan efisien. Ikuti panduan dalam artikel ini, dan Anda akan memiliki aplikasi multi-bahasa yang sukses dalam waktu singkat. Ingatlah untuk selalu menguji dan mengoptimalkan localization Anda untuk memastikan bahwa Anda memberikan pengalaman pengguna terbaik bagi semua pengguna Anda. Selamat mencoba!