Günümüzde web uygulamalarını farklı dillerde sunmak, kullanıcı deneyimini iyileştirmek ve global erişimi artırmak için önemli bir gereklilik. Laravel’in Localization (Yerelleştirme) özelliği sayesinde, uygulamanızı kolayca çok dilli hale getirebilirsiniz. Ayrıca, SEO uyumlu URL’ler ile arama motorlarında daha iyi sıralamalar elde etmek mümkündür.
Bu yazıda, Laravel ile çoklu dil desteği nasıl sağlanır, dil bazlı URL yapısı nasıl oluşturulur ve SEO uyumlu URL’ler nasıl düzenlenir gibi konuları detaylıca ele alacağız.
1. Laravel’de Çoklu Dil Desteği (Localization) Nedir?
Localization, uygulamanın farklı dillerde çalışmasını sağlayan bir mekanizmadır. Laravel’de lang/ klasörü içinde bulunan dosyalar, dil çevirilerini saklamak için kullanılır.
Örnek Dosya Yapısı:
/resources
├── /lang
├── /en
│ ├── messages.php
│ ├── validation.php
├── /tr
│ ├── messages.php
│ ├── validation.php
Burada messages.php, uygulamada kullanılan metinlerin çevirilerini içerir.
2. Laravel’de Dil Dosyalarının Kullanımı
Dil dosyalarını şu şekilde oluşturabilirsiniz:
mkdir -p resources/lang/en
mkdir -p resources/lang/tr
touch resources/lang/en/messages.php
touch resources/lang/tr/messages.php
Örneğin, İngilizce dil dosyamız şu şekilde olabilir:
// resources/lang/en/messages.php
return [
'welcome' => 'Welcome to our website!',
'login' => 'Login',
'register' => 'Register',
];
Türkçe dil dosyamız:
// resources/lang/tr/messages.php
return [
'welcome' => 'Web sitemize hoş geldiniz!',
'login' => 'Giriş Yap',
'register' => 'Kayıt Ol',
];
3. Laravel’de Dil Seçimi ve Kullanımı
Laravel’de çeviri metinlerini __('key') veya trans('key') fonksiyonları ile çağırabilirsiniz:
echo __('messages.welcome'); // Aktif dile göre çeviriyi gösterir
echo trans('messages.login'); // Alternatif kullanım
Blade dosyalarında ise şu şekilde kullanabilirsiniz:
<h1>{{ __('messages.welcome') }}</h1>
<a href="{{ route('login') }}">{{ __('messages.login') }}</a>
4. Kullanıcının Dilini Otomatik Algılama
Kullanıcının tarayıcı dilini otomatik olarak algılamak için bir middleware oluşturabilirsiniz:
php artisan make:middleware LanguageMiddleware
Middleware içinde tarayıcı dilini kontrol edip ayarlayabilirsiniz:
// app/Http/Middleware/LanguageMiddleware.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
class LanguageMiddleware
{
public function handle($request, Closure $next)
{
// Tarayıcı dilini al
$locale = $request->getPreferredLanguage(['en', 'tr']);
// Laravel'in dilini ayarla
App::setLocale($locale);
return $next($request);
}
}
Bu middleware’i Kernel.php dosyanıza eklemeyi unutmayın:
protected $middleware = [
\App\Http\Middleware\LanguageMiddleware::class,
];
5. URL Üzerinden Dil Seçimi
Bazı projelerde kullanıcıların manuel olarak dil seçmesine izin vermek gerekir. Bunun için route parametresi kullanabiliriz.
Dil bazlı route yapısı şu şekilde olabilir:
Route::get('/{locale}/home', function ($locale) {
App::setLocale($locale);
return view('home');
})->where('locale', 'en|tr');
Bu sayede şu şekilde çalışan bir sistem elde edebiliriz:
-
example.com/en/home→ İngilizce -
example.com/tr/home→ Türkçe
6. SEO Uyumlu Dil Seçimi ve URL Yapıları
Google gibi arama motorları için dil bazlı SEO uyumlu URL’ler önemlidir. Laravel’de bunu desteklemek için Route::group kullanabiliriz:
Route::group(['prefix' => '{locale}', 'middleware' => 'setlocale'], function () {
Route::get('/home', function () {
return view('home');
})->name('home');
});
SEO uyumlu URL oluşturma:
Blade içinde otomatik dil değiştiren linkler oluşturabilirsiniz:
<a href="{{ route('home', ['locale' => 'en']) }}">İngilizce</a>
<a href="{{ route('home', ['locale' => 'tr']) }}">Türkçe</a>
Bu yapı sayesinde Google botları, her dilin URL’sini ayrı bir sayfa olarak görecektir.
Ekstra SEO Ayarları:
-
HTML
<lang>etiketi kullanımı:
<html lang="{{ app()->getLocale() }}">
-
Dil bazlı meta etiketler ekleme:
<link rel="alternate" hreflang="en" href="https://example.com/en/home" />
<link rel="alternate" hreflang="tr" href="https://example.com/tr/home" />
7. Dil Seçimi için Dropdown (Vue.js ile Örnek)
Eğer dil seçimini dropdown menü ile sunmak istiyorsanız, Vue.js kullanarak bunu daha dinamik hale getirebilirsiniz:
Vue.js bileşeni:
<template>
<select @change="changeLanguage($event)">
<option value="en">English</option>
<option value="tr">Türkçe</option>
</select>
</template>
<script>
export default {
methods: {
changeLanguage(event) {
let locale = event.target.value;
window.location.href = `/${locale}/home`;
}
}
};
</script>
Bu dropdown sayesinde kullanıcılar diller arasında kolayca geçiş yapabilir.
8. Çoklu Dil Destekli Form Doğrulama
Laravel’de form doğrulama mesajlarını da çeviri dosyalarına ekleyebilirsiniz.
Örneğin, validation.php dosyasında hata mesajları oluşturabilirsiniz:
// resources/lang/en/validation.php
return [
'required' => 'The :attribute field is required.',
];
// resources/lang/tr/validation.php
return [
'required' => ':attribute alanı zorunludur.',
];
Form doğrulamasını şu şekilde tanımlayabilirsiniz:
$request->validate([
'email' => 'required|email',
]);
Hata mesajlarını Blade içinde göstermek için:
@if ($errors->any())
@foreach ($errors->all() as $error)
<p>{{ $error }}</p>
@endforeach
@endif
Sonuç
Laravel’de Localization (Çoklu Dil Desteği) uygulamalarınızı daha erişilebilir hale getirir.
SEO uyumlu URL yapıları Google sıralamalarını iyileştirmeye yardımcı olur.
Kullanıcının tarayıcı dilini algılamak, daha iyi bir kullanıcı deneyimi sunar.
Form doğrulama mesajlarını çoklu dil destekli hale getirerek daha profesyonel bir yapı kurabilirsiniz.
Laravel projelerinizde çoklu dil desteği ekleyerek, global pazarda rekabet avantajı sağlayabilirsiniz!
