Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

mgsmus onu yapıyorum zaten olmuyor. Normalde dil değişiyor ama route da app.locale den alıyor
bu arada cache confıg filan hepsini temizledim.

    gsahin Bu işlemi bir middleware içerisinde yapacaksınız. Her istekte dil değişecek. Dili ya url'den, session'dan ya da giriş yapmış kullanıcı varsa ondan alacaksınız.

      mgsmus Ben sorunu tam olarak anlatamadım kusurabakmayın.
      Middleware de App::setLocale('tr'); bu şekilde yapıyorum. Olmadı
      Sitede çeviri işlemleri çalışıyor bunda sıkıntı yok.
      rout ta kullanmak istediğimde çeviri çalışıyor ama Config/App locel değerini alıyor.
      bende middlewarede config set ile değiştirmeyi denedim oda olmadı.
      Üstüne Config::set('app.locale','tr'); yaptım ama app.php dosyasında ilk tanımlı olan local değerini alıyor.
      app.php de local değerini değiştirdiğimde çeviri de değişiyor. yani ordaki değeri aldığına eminim.
      Config set ile locelı tr atadığımda değişiyor onuda baktım.
      Config/app deki locale tr yapınca route da tr çeviri çalışıyor.
      Config/app deki locale en yapınca route da en çeviri çalışıyor.
      ama manuel yapıyorum middlewarede yaptığımı algılamıyor.
      Kusura bakamyin detayli yazmaya çalıştım. tekrar yazayım normel translate çalışıyor sadece route da çalışmıyor. sanki middleware route dan sonra çalışıyor gibi.

        gsahin Ne kadar etkili olur bilmiyorum ama Route'da mustafa abinin dikkat edin dediği bir bilgi vardı 2 rota aynı ise birisi diğerini ezer diye hatırlıyorum kernelda ki o locale middleware'ini en üstte alabilirseniz belki çalışır eziyor da olabilir belki

          koti42 middleware üste alamyı denedim. bir kaç yer değişikliği yaptım ama maalesef. middleware çalışıyor ama route ta devreye girmiyor o kısmını anlamadım.
          Bu arada laravel 11 kullanıyorum.

            gsahin kodları bir paylaşır mısın acaba

            • mgsmus

              Seviye 1382
            • Düzenlendi

            gsahin Şöyle bir durum var, siz dinamik değil statik bir rota kullanıyorsunuz, sadece dile göre değişiyor. Diyelim ki tr, en ve de şeklinde 3 tane dil var ama siz mevcut dil ne ise ona sadece rota tanımlamış oluyorsunuz. Mesela dili segmentten alıyorsanız şunun gibi bir şey yapmanız lazım:

            foreach (['tr', 'en', 'de'] as $locale) {
                Route::prefix($locale)
                    ->get(__('home', [], $locale), [HomeController::class, 'index'])
                    ->name('home');
            }

            ya da middleware kullanmadan

            $locale = request()->segment(1);
            
            if (!in_array($locale, ['tr', 'en', 'de'])) {
                $locale = 'tr';
            }
            
            app()->setLocale($locale);
            
            Route::prefix($locale)
                ->get(__('home'), [HomeController::class, 'index'])
                ->name('home');

            Benim ıstediğim pek mümkün değil galiba. Route dan önce kullanıcının dil bilgisini almam gerekiyor ama alamıyorum.
            Auth::user() route dosyasinda gelmiyor.
            Dil değerini kullanıcıya göre almaya çalışıyorum bunun bir yolu varsa sevinirim.

              gsahin auth user alabilmek için kullanicinin giriş yapmış olması gerekiyor normalde ama middleware araya girdiği için bu bilgiye erisemezsin ama bir yolu var elbette erismenin fonksiyon middleware içinde çalışabilir md kontrolü bitince fn çalışır bu sayede giriş yapmış kullanıcının bilgilerine erişebilirsiniz https://youtu.be/az0FolROdE8?si=D62-J1t5xFXU6rkJ

              gsahin Bir middleware içinde şöyle yapacaksınız:

              App::setLocale($request->user()?->locale ?? config('app.locale'));

              Kullanıcı giriş yapmış ise onun dili; yapmamış ise varsayılan dil geçerli olacak. Daha sonra üstte yazdığım gibi statik rotaları tüm diller için tanımlayacaksınız.

                mgsmus şuan nasıl oldu bilmiyorum post işlemlerinde 419 hatası alıyorum.
                Localde test ettim bir sıkıntı yok heralde bir cache sorunu diye düşünüyorum.
                Güncelleme: Düzeldi.
                Tüm bilgiler içinde herkese teşekkür ederim