Laravel Projelerinde Çoklu Dil Desteği (Localization) ve SEO Uyumlu URL’ler

L

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!

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri