Laravel’de Language (Dil) İşlemleri

tarafından
459
Laravel’de Language (Dil) İşlemleri
Güzel Hosting

Merhabalar,
Laravel’de dil işlemi biraz meşakatli bir işlemdir fakat alt kısımdaki talimatlar ile bunu çok kolay bir hale getirebiliriz.
Öncelikle laravel’de dil yapısından bahsetmek isterim resources/lang/ klasör altında default olarak en klasörü gelmektedir bu klasörü dil sistemini geliştirdikten sonra kopyalarak ismini değiştirip aynı klasör altına yapıştırıyoruz ve adını istediğimiz dile değiştiriyoruz örneğin ven tr’ye çevirdim yine aynı şekilde ingilizce’yi Türkçe’ye çeviri işlemlerini yaptıktan sonra bunu view katmanında gösteriminden bahsedeyim.

Laravel’de blade engine ile kullanımı şekli alt kısımdaki görsel’deki gibidir ben trans methodunu kullanıyorum dilerseniz lang ‘ı kullabilirsiniz.

Üst kısımda yer alan frontend.features ile belirtiğim işlem tr veya en klasörleri altından frontend dosyası içerisinde features’e atadığımız veriyi çeker.
Dil sisteminden bahsettiğimize göre işin meşakatli olan kısmına başlayalım o dili değiştirme ve o dil ile siteyi kullanbilmeyi.
Öncelikle bu işlem için bir controller ve bir middleware’e ihtiyaç duymaktayız. Hemen bunları oluşturalım.
PhpStorm Terminalde Alt kısımdaki komutları uygulayalım.

php artisan make:controller LanguageController
php artisan make:middleware Language

Yukarıdaki kodları uyguladığımızda ilgili dosyalarımız oluşacaktır. bu dosyalara app/Http altında Controller ve Middleware klasörleri altından ulaşabilirsiniz.
Daha Sonra routes.php ‘ye gelerek bir rota belirleyelim. Bu rota LanguageController ‘un index method ‘una gitsin. Bu method’ alt kısıma yazıyorum

Route::get('/lang/{locale?}', '[email protected]');

Üst kısımdaki kod ile lang/ altında gelen değeri alıp bunu [email protected] methoduna geçiriyoruz değeri locale? işareti olarak almamızın nedeni herhangi bir değer girilmediğinde hata vermemesidir.
Daha sonra ilgili controller’i açarak alt kısımdaki kodu uyguluyoruz.

    public function index($locale=null)
    {
        $locales= ["tr","en"];
        if(in_array($locale,$locales)){
            Session::set('locale', $locale);
        }
        return redirect()->back();
    }

İlgili kontroller’e üst kısımdaki kodu yapıştırıyoruz. $locale=null denilmesinin nedeni herhangi bir değer gelmediğinde if’in çalışmayarak session’a herhangi bir veri atılmamasını sağlıyoruz. Locales ile bir nevi güvenlik sağlayarak bu diller dışında bir dil girildiğinde sistemi yormasını engelleyerek ufak bir güvenlik sağlıyoruz, burayı kullanacağız dile göre artırabilirsiniz.
Eğer bir değer var ise sessiona locale adında bunu atıyoruz ve bu sayfaya nereden geliyorsa o sayfaya geri dönüşü redirect methodu ile yapıyoruz.
Daha sonra ilgili middleware’i açarak alt kısımdaki kodu uyguluyoruz.

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

Middleware ile ilgili session değerini alıyoruz ve set locale direyerek laravel’in bu şekilde çalışmasını sağlıyoruz.
En son Kernel.php açarak $middlewareGroups altına ekliyoruz.

\App\Http\Middleware\Language::class,

Üst kısımdaki kodu Kernel’e yazmamızın nedeni her seferinde hangi dilin kullanıldığının kontrolünü sağlayıp bu dili göstermektedir.

Bu işlemin sonunda dil sisteminin çalışıp çalışmadığını kontrol ederek işlemleri tamamlıyoruz.
Daha ayrıntılı bilgi için laravel dökümantasyonunu inceleyebilirsiniz.
Yararlı olabildiysem ne mutlu, Hatam var ise bildirilirse düzeltebilirim.