Laravel Çoklu Dil (i18n) Sistemi: Statik ve Dinamik İçerik İçin Tam Kapsamlı Rehber
Bu rehberde, Laravel projesinde hem statik (sabit metinler) hem de dinamik (veritabanı içerikleri) için Türkçe, İngilizce ve Arapça…
Laravel Çoklu Dil (i18n) Sistemi: Statik ve Dinamik İçerik İçin Tam Kapsamlı Rehber
Bu rehberde, Laravel projesinde hem statik (sabit metinler) hem de dinamik (veritabanı içerikleri) için Türkçe, İngilizce ve Arapça dillerini destekleyen, otomatik çeviri ve kolay yönetim sağlayan bir çoklu dil sistemi kurulumunu adım adım bulacaksınız.
1. Statik İçeriklerde Çoklu Dil Desteği
1.1. Dil Dosyalarını Oluşturma
lang/ klasörü altında her dil için bir klasör ve ilgili dosyaları oluşturun:
lang/
├── tr/
│ └── app.php
├── en/
│ └── app.php
└── ar/
└── app.php
Örnek: lang/tr/app.php
return [
'welcome' => 'Hoşgeldiniz',
'contact' => 'İletişim',
];
Örnek: lang/en/app.php
return [
'welcome' => 'Welcome',
'contact' => 'Contact',
];
1.2. Blade’de Kullanımı
<h1>{{ __('app.welcome') }}</h1>
<a href="#">{{ __('app.contact') }}</a>
2. Dinamik İçeriklerde Çoklu Dil (Veritabanı)
2.1. Veritabanı Kolonlarını JSON’a Çevirme
İçeriği çoklu dilde saklamak için ilgili kolonları json tipine çevirin.
Migration Örneği:
$table->json('title')->nullable();
$table->json('description')->nullable();
Mevcut tabloyu değiştirmek için:
ALTER TABLE abouts MODIFY title JSON NULL;
ALTER TABLE abouts MODIFY description JSON NULL;
2.2. Modelde getTranslation Fonksiyonu
Her modelde, JSON içeriği locale’a göre döndüren bir fonksiyon ekleyin:
public function getTranslation($field, $locale = null)
{
$locale = $locale ?: app()->getLocale();
$value = $this->{$field};
if (is_string($value) && $this->isJson($value)) {
$arr = json_decode($value, true);
return $arr[$locale] ?? ($arr['tr'] ?? reset($arr));
}
return $value;
}
private function isJson($string)
{
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
2.3. Blade’de Kullanımı
<h2>{{ $about->getTranslation('title') }}</h2>
<p>{{ $about->getTranslation('description') }}</p>
3. Admin Panelde Otomatik Çeviri
3.1. Google Translate Paketini Kurun
composer require stichoza/google-translate-php
3.2. Controller’da Otomatik Çeviri
Admin panelde sadece Türkçe girildiğinde, diğer diller otomatik çevrilsin:
use Stichoza\GoogleTranslate\GoogleTranslate;
$trTitle = $request->input('title');
$enTitle = GoogleTranslate::trans($trTitle, 'en', 'tr');
$arTitle = GoogleTranslate::trans($trTitle, 'ar', 'tr');
$model->title = json_encode([
'tr' => $trTitle,
'en' => $enTitle,
'ar' => $arTitle,
]);
4. Dil Değiştirme (Locale Switch)
4.1. Route ve Middleware
routes/web.php:
Route::get('language/{locale}', function($locale){
session()->put('locale', $locale);
return redirect()->back();
})->name('locale');
app/Http/Middleware/SetLocale.php:
public function handle($request, Closure $next)
{
app()->setLocale(session('locale', config('app.locale')));
return $next($request);
}
Ve bu middleware’i web grubuna ekleyin.
4.2. Blade’de Dil Seçici
<li><a href="{{ route('locale', 'tr') }}">Türkçe</a></li>
<li><a href="{{ route('locale', 'en') }}">English</a></li>
<li><a href="{{ route('locale', 'ar') }}">العربية</a></li>
5. Örnek: İletişim Sayfası
Model:
// app/Models/Contact.php
public function getTranslation($field, $locale = null) { ... }
Blade:
<input type="text" placeholder="{{ __('contact.name') }}">
<strong>{{ $contact->getTranslation('phone_title') }}</strong>
6. Sık Karşılaşılan Sorunlar
- JSON ham veri görünüyor: Blade’de doğrudan
$model->fieldyerine$model->getTranslation('field')kullanın. - Çeviri eksikse: JSON’da ilgili dil yoksa Türkçe veya ilk bulunan dil gösterilir.
- Statik metinler çevrilmiyor:
__('...')fonksiyonunu kullanmayı unutmayın.
7. Sonuç
Bu sistem ile:
- Tüm statik ve dinamik içerikler çoklu dilde yönetilebilir.
- Admin panelde tek dil girişiyle otomatik çeviri sağlanır.
- Frontend’de seçilen dile göre içerik otomatik değişir.
Ekstra: Daha Temiz Kod İçin
- Her modelde aynı
getTranslationfonksiyonunu kullanmak yerine bir trait yazabilirsiniz. - Çeviri anahtarlarını ve JSON yapısını standartlaştırmak için helper fonksiyonlar ekleyebilirsiniz.
메타데이터
- post_id
- b32a4fdd97e7
- slug
- laravel-çoklu-dil-i18n-sistemi-statik-ve-dinamik-i̇çerik-i̇çin-tam-kapsamlı-rehber-b32a4fdd97e7
- url
- https://medium.com/@ahmetrasimbayhan/laravel-%C3%A7oklu-dil-i18n-sistemi-statik-ve-dinamik-i%CC%87%C3%A7erik-i%CC%87%C3%A7in-tam-kapsaml%C4%B1-rehber-b32a4fdd97e7
- canonical_url
- https://medium.com/@ahmetrasimbayhan/laravel-%C3%A7oklu-dil-i18n-sistemi-statik-ve-dinamik-i%CC%87%C3%A7erik-i%CC%87%C3%A7in-tam-kapsaml%C4%B1-rehber-b32a4fdd97e7
- author_url
- https://medium.com/@ahmetrasimbayhan
- status
- ok
- fetched_at
- 2026-06-09 15:37:30