Laravel'de birden fazla dil olması gereken projeler ile çalışmamız gerekebiliyor, bunun için Laravel gerekli altyapıyı bize sunuyor. Şimdi örnek olarak basit bir localization işlemi göstereceğim. Öncelikle projemizi kuralım.

composer create-project --prefer-dist laravel/laravel localization

Dil dosyalarımızı resources/lang/ altında klasörlerde görebiliriz. burada default olarak en/ klasörü mevcut. biz bunun yanına tr/ isminde bir klasör açıp içine yeni bir dosya oluşturalım. Aynı dosyayı en içerisine de oluşturalım.


Resimde gördüğünüz gibi tr/ isminde klasörümü açıp, içerisine view.php adında bir dosya açıyorum. Aynı isimdeki dosyayı en/ klasörü altına da açalım.

Not : Çevirisi olan kısımları iki dilde kullanmak istiyorsak iki klasörün altındaki dosya isimleri aynı olmalıdır.

// en/view.php dosyası içeriği

<?php
return [
    'name' => 'Name',
    'surname' => 'Surname',
];



// tr/view.php dosyası içeriği

<?php
return [
    'name' => 'Adınız.',
    'surname' => 'Soyadınız',
];

resources/lang/ klasörü altındaki dosyalarım bu şekilde. Şimdi dilimizi değiştireceğimiz controllerımızı ve bu işlemi tutacak olan middlewarei açalım.

php artisan make:controller LocalizationController


php artisan make:middleware Localization

Şimdi dil değiştirme işlemi için rotamızı oluşturalım routes/web.php içerisine

Route::get('change-lang/{locale}', 'LocalizationController@index')->name('change-lang');

default olarak gelen welcome.blade.php içerisinde bir bölümde bu işlemi yapacağım. welcome.blade.php'yi açıp \App::getLocale(); kod satırı ile mevcut dilimizin ne olduğunu görebiliriz. varsayılan olarak en olarak gelecek.

// resources/views/welcome.blade.php içeriği

<a href="#.">Mevcut Dil : {{ App::getLocale() }}</a>

gördüğümüz kodda mevcut dilimiz görünüyor.

dili gösteren bölümümün yanına dili değiştir isminde bir link <a> tagı oluşturup burada locale işlemindeki değişiklikleri yapacağım.

// resources/views/welcome.blade.php içeriği

<a href="{{ route('change-lang','tr') }}">Dili Değiştir</a>

gördüğünüz kodda change-lang adındaki rotaya bir parametre gönderiyoruz (değiştirmek istediğimiz dilin kısayolu).

// LocalizationController.php

public function index(){
    Session::put('locale','tr');
    return redirect()->back();
}

Burada locale adında bir sessiona tr kelimesini atıyoruz. Burada bunu yapmamızın amacı locale işlevinin persistant olmaması, yani kalıcı olmaması. Bu yüzden middleware kullanıp her istekte sessionu kontrol ederek locale işlemimizi değiştiriyoruz

// app/Http/Middleware/Localization.php  (middlware dosyamız)

public function handle($request, Closure $next)
{
    if (Session::has('locale')) {
        App::setLocale(Session::get('locale'));
    }
    return $next($request);
}

burada handle methodumuzun içinde sessionu sorguluyoruz, eğer locale adında sessionumuz varsa App::setLocale('yeni-locale'); dediğimiz takdirde sessiona veri gönderdiğimiz zaman Locale'nin değiştiğini görebiliriz.


Şimdi middlewareimizi etkinleştirelim. Bunun için app/Http/Kernel.php içerisinde protected $middlewareGroups dizisinin içine ekleyelim.


Bu işlemi yaptıktan sonra view tarafında ise Locale nin değiştiğini görebiliriz.


İşlemimiz bu kadar, burada önemli olan nokta dil App::setLocale işlemimizin persistant olmamasını bilmek :) iyi çalışmalar.