Implementasi multi-language dengan data yang diambil dari database, kita akan menyimpan terjemahan setiap teks atau kalimat dalam tabel di database. Ini sangat berguna untuk aplikasi yang memerlukan terjemahan dinamis yang mudah dikelola melalui database. Berikut adalah tutorial lengkapnya.
Langkah 1: Buat Project Laravel dan Siapkan Database
Buat Project Laravel Baru atau Gunakan Project yang Sudah Ada
laravel new multi-language-db
cd multi-language-db
Konfigurasi Database di .env
Sesuaikan konfigurasi database di file .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=multilanguage_db
DB_USERNAME=root
DB_PASSWORD=
Jalankan Perintah Migrasi
Jika sudah siap, jalankan migrasi untuk memastikan tabel users dan tabel dasar lainnya sudah ada di database.
php artisan migrate
Langkah 2: Buat Tabel Translasi di Database
Buat Migration Baru untuk Tabel translations
Kita akan membuat tabel translations untuk menyimpan data terjemahan. Setiap teks yang akan diterjemahkan akan memiliki key unik dan terjemahan untuk setiap bahasa.
php artisan make:migration create_translations_table
Edit File Migration
Di dalam file migration baru (database/migrations/...create_translations_table.php), tambahkan kolom yang diperlukan untuk menyimpan data terjemahan.
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTranslationsTable extends Migration
{
public function up()
{
Schema::create('translations', function (Blueprint $table) {
$table->id();
$table->string('key');
$table->string('language');
$table->text('text');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('translations');
}
}
Migrasikan Tabel
Jalankan migrasi untuk membuat tabel translations:
php artisan migrate
Langkah 3: Menambahkan Data Translasi ke Database
Isi Data Terjemahan untuk Bahasa yang Dibutuhkan
Anda bisa menambahkan data langsung melalui Tinker atau dengan seeding. Misalnya:
php artisan tinker
Kemudian isi data di tinker command sebagai berikut:
DB::table('translations')->insert([
['key' => 'welcome', 'language' => 'en', 'text' => 'Welcome to our application!'],
['key' => 'welcome', 'language' => 'id', 'text' => 'Selamat datang di aplikasi kami!'],
['key' => 'login', 'language' => 'en', 'text' => 'Login'],
['key' => 'login', 'language' => 'id', 'text' => 'Masuk'],
// Tambahkan lebih banyak data sesuai kebutuhan
]);
Jika berhasil, data akan tampil di database seperti berikut:
Langkah 4: Buat Helper atau Model untuk Mengambil Terjemahan
Buat Model Translation
Buat model Translation agar kita dapat mengakses data terjemahan dari database:
php artisan make:model Translation
Edit Model Translation
Di dalam file app/Models/Translation.php, tambahkan metode untuk mengambil teks terjemahan berdasarkan kunci dan bahasa:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Translation extends Model
{
protected $fillable = ['key', 'language', 'text'];
public static function getTranslation($key, $language)
{
$translation = self::where('key', $key)->where('language', $language)->first();
return $translation ? $translation->text : $key;
}
}
Buat Helper Function untuk Mengambil Terjemahan
Tambahkan fungsi helper di app/helpers.php. Dan isi code berikut:
// app/helpers.php
use App\Models\Translation;
function translate($key)
{
$language = session('locale', 'en'); // default 'en'
return Translation::getTranslation($key, $language);
}
Buka file composer.json dan daftarkan helper tadi di bawah "autoload" -> "files":
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
"files": [
"app/helpers.php"
]
},
Setelah itu, jalankan perintah berikut agar perubahan composer.json diterapkan:
composer dump-autoload
Langkah 5: Menambahkan Middleware untuk Mengubah Bahasa
Buat Middleware Baru
Buat middleware LanguageSwitcher untuk mengubah bahasa berdasarkan session:
php artisan make:middleware LanguageSwitcher
Edit Middleware
Di app/Http/Middleware/LanguageSwitcher.php, tambahkan kode berikut:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
class LanguageSwitcher
{
public function handle($request, Closure $next)
{
$language = session('locale', 'en');
App::setLocale($language);
return $next($request);
}
}
Daftarkan Middleware
Buka app/Http/Kernel.php dan daftarkan LanguageSwitcher di grup web:
protected $middlewareGroups = [
'web' => [
// middleware lainnya
\App\Http\Middleware\LanguageSwitcher::class,
],
];
Langkah 6: Menambahkan Controller dan Route untuk Mengubah Bahasa
Buat Controller untuk Bahasa
Buat LanguageController:
php artisan make:controller LanguageController
Edit Controller
Di dalam LanguageController, tambahkan metode untuk mengubah bahasa:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class LanguageController extends Controller
{
public function switchLang($lang)
{
session(['locale' => $lang]);
return redirect()->back();
}
}
Tambahkan Route untuk Mengganti Bahasa
Di routes/web.php, tambahkan route:
use App\Http\Controllers\LanguageController;
Route::get('lang/{lang}', [LanguageController::class, 'switchLang'])->name('lang.switch');
Langkah 7: Menampilkan Terjemahan di Tampilan
Gunakan helper translate() untuk menampilkan teks berdasarkan bahasa aktif. Contoh di resources/views/welcome.blade.php:
<h1>{{ translate('welcome') }}</h1>
<a href="{{ route('lang.switch', 'en') }}">English</a> |
<a href="{{ route('lang.switch', 'id') }}">Indonesia</a>
Langkah 8: Testing Multi-Language dari Database
Jalankan Server
php artisan serve
Uji Fitur Multi-Language
Akses halaman http://localhost:8000, dan klik link bahasa yang disediakan untuk mengganti bahasa tampilan. Jika berhasil akan seperti berikut untuk bahasa indonesia
Jika English dklik, maka akan menghasilkan seperti berikut: