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

şimdi şöyle bir yapım var

htts//site.com/en/services/make-sites
htts//site.com/az/xidmetler/saytlar-duzeldilir

ben istiyorum ki route da olan services en ve az gibi dinamik olsun. Bunu nasıl yapabilirim.

    Mustafa'nın cevabı yeterli, ek bilgi olarak şunu belirteyim:

    Laravel ilk eşleştiği rotada, sonraki rotaları okumadan işleme başlayacaktır, bu yüzden bu tür çoklu dinamik rotalarınızı diğer tüm rotaların altına yerleştirdiğinizden emin olun.

    mgsmus hocam ben şunu anlamadım

    .__('services').

    bunu nereden alacağım ve bu diyelim ingilizcede services türkçede hizmetler olmasını nereden anlayacak nereye yazayım yani çevirileri

      mgsmus yani

      lang/en/services.php

      <?php
      
      return [
          'services' => 'Services',
      ];

      resources/lang/tr/services.php

      <?php
      
      return [
          'services' => 'Hizmetler',
      ];

      Sonra
      Route::get('{lang}/'.__('services').'/{slug}', ServiceController::class);

      dediğimde değişen dile göre bana route çevirisini vericek öyle mi

        bir yıl sonra

        Konuyu hortlatmış gibi oalcam ama.
        Route::get(__('home'),[HomeController::class,'index'])->name('home');
        yukardaki routue translate çalışıyor ama dil olarak config/app içindeki locale değeri alıyor.
        middleware de Config::set('app.locale','tr'); olarak değiştirmeyi denedim ama olmadı yardımcı olabilirmisiniz.

          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.