• 16-04-2025, 23:31:11
    #1
    Arkadaşlar merhaba.
    Laravele özel bir dil paketi hazırladım.
    Gelişmiş bir metod ile her isteği analiz edip mevcut dili belirliyor. prefix ve slug değerleri her dilde farklı ve veritabanında tutuluyor.
    Başınızı ağrıtmak istemiyorum. Sistem güzel çalışıyor fakat tek problemim şu.
    Kernelde bu middlewareyi tanımlamama rağmen routelerin tanımlanmasından sonra çalışıyor.
    O sebeple dil sınıfından hep varsayılan dilin slugları prefixleri geliyor.
    Laravelde yeni olduğum için bir türlü çözemedim. event-listner da denedim olmadı.
    Nasıl bu sıralamayı düzeltebilirim?
    İlk servis çalışıp dili belirlemeli, sonra routeler oluşmalı.
    Bilgisi olan yardımcı olursa mutlu olurum.
    Çok teşekkürler.
  • 16-04-2025, 23:38:30
    #2
    Eğer dil prefix'ine göre route'ları dinamik olarak değiştirmek istiyorsan, RouteServiceProvider içinde dili önceden belirlemen gerekebilir:

    // app/Providers/RouteServiceProvider.php
    
    public function boot()
    {
        parent::boot();
    
        // Kullanıcıdan gelen isteğe göre dili tespit et
        $locale = $this->detectLocaleFromRequest();
    
        App::setLocale($locale);
    }
    
    protected function detectLocaleFromRequest()
    {
        // Örneğin, URL prefix'inden dil kodunu çıkar
        $prefix = request()->segment(1);
    
        // veritabanında prefix'e göre dili bul
        $locale = DB::table('languages')->where('prefix', $prefix)->value('code') ?? config('app.locale');
    
        return $locale;
    }
  • 16-04-2025, 23:38:41
    #3
    providerlar middleware'lardan önce çalışır. Metodunuzu provider tarafına taşımayı denediniz mi?
  • 16-04-2025, 23:41:33
    #4
    Mhmmd adlı üyeden alıntı: mesajı görüntüle
    providerlar middleware'lardan önce çalışır. Metodunuzu provider tarafına taşımayı denediniz mi?
    Hocam composer paketi olarak hazırladım zaten bu paketi. service provider ile tanıtıyorum laravele. bu dil belirleme metodunu da providerdaki boot metodunda kernele
    prependMiddleware ile veriyorum. onun yerine direkt dil belirleme metodunu mu çalıştırmalıyım acaba?

    edit:
    Hocam teşekkür ederim. Fikriniz işe yaradı Service providerda direkt çalıştırdım metodu şu an istediğim gibi çalışıyor. Sağ olun.
  • 16-04-2025, 23:44:08
    #5
    DOS adlı üyeden alıntı: mesajı görüntüle
    Eğer dil prefix'ine göre route'ları dinamik olarak değiştirmek istiyorsan, RouteServiceProvider içinde dili önceden belirlemen gerekebilir:

    // app/Providers/RouteServiceProvider.php
    
    public function boot()
    {
        parent::boot();
    
        // Kullanıcıdan gelen isteğe göre dili tespit et
        $locale = $this->detectLocaleFromRequest();
    
        App::setLocale($locale);
    }
    
    protected function detectLocaleFromRequest()
    {
        // Örneğin, URL prefix'inden dil kodunu çıkar
        $prefix = request()->segment(1);
    
        // veritabanında prefix'e göre dili bul
        $locale = DB::table('languages')->where('prefix', $prefix)->value('code') ?? config('app.locale');
    
        return $locale;
    }
    Hocam buna benzer ama çok karmaşık bir metod benimki.
    1. x.com/hello-world
    2. x.com/en/hello-world
    3. x.com/en/blog/hello-world
    4. x.com/blog/hello-world
    5. x.com/news/hello-world
    Örneğin postları yukarıdaki 5 farklı url yapısında bulabiliyor. metodda problem yok aslında dediğim gibi. sadece sıralaması bozuk. routelerin tanımlanmasından önce çalışması lazım.
    metod sonradan çalıştığı için şu anda ana dilin verileri geliyor varsayılan olarak.
  • 19-04-2025, 05:52:23
    #6
    Teknoloji ve Yazılım
    sacilannurlar adlı üyeden alıntı: mesajı görüntüle
    Arkadaşlar merhaba.
    Laravele özel bir dil paketi hazırladım.
    Gelişmiş bir metod ile her isteği analiz edip mevcut dili belirliyor. prefix ve slug değerleri her dilde farklı ve veritabanında tutuluyor.
    Başınızı ağrıtmak istemiyorum. Sistem güzel çalışıyor fakat tek problemim şu.
    Kernelde bu middlewareyi tanımlamama rağmen routelerin tanımlanmasından sonra çalışıyor.
    O sebeple dil sınıfından hep varsayılan dilin slugları prefixleri geliyor.
    Laravelde yeni olduğum için bir türlü çözemedim. event-listner da denedim olmadı.
    Nasıl bu sıralamayı düzeltebilirim?
    İlk servis çalışıp dili belirlemeli, sonra routeler oluşmalı.
    Bilgisi olan yardımcı olursa mutlu olurum.
    Çok teşekkürler.
    Konuyu çözebildiniz mi bilmiyorum ama sorunuzu şimdi gördüm sizin durumunuz da Laravel'de dil ön ekinin ve dile göre özel slug kullanımının en doğru ve yaygın yöntemi şudur ;

    Bunun sebebi Laravel'in kendi iç mekanizmasındaki Routing olayları ile ilgisi vardır. Sorun şu ki daha öncesin de bu konuyu çözmek için izlediğim yaklaşımlardan biri Laravel'in RouteRegistrar kullanarak rotaları yüklediği Routing paketinin içerisinde bir RoutingServiceProvider adında sağlayıcı mevcuttur bu sağlayıcının içerisinde rotalar ile ilgili ön yükleme alanını ve geri çağrı işlevlerini göreceksiniz o geri çağrı işlevlerinde rotaların her yeniden ön yüklenmesi ile birlikte sağlayıcının içerisinde gerekli düzenlemeleri de yapmasını sağlarsanız rotalardaki slug, ön ek gibi değişikliklerin tamamı rotalar değiştikçe değişecektir fakat sorun şunun ile bitmeyecektir. Laravelin kendi mekanizması bir önceki bağlantıyı ziyaret ederken yine size asıl tercih etmiş olduğunuz dilin bağlantısını sağlayacaktır değiştirirken bunu aşmak için URL cephesini kullanarak bir önceki rota takma adını kullanırsanız url bazlı olarak değerlendirmeyeceği için yönlendirmeler için her zaman doğru ve yeni dile geçildiğinde yeni dilin verilerini çekecektir, kolaylıklar dilerim.

    O Sağlayıcı haricinde bir müdahale yaparsanız hep uygulama rotaları yüklendikten sonra değerlendirilecektir bu yüzdende geçerli olmayacaktır bilginize, fakat o sağlayıcı üzerinde değişiklik yaparsanız istediğiniz süreç aktif ve düzenli bir şekilde çalışacaktır.
  • 19-04-2025, 15:10:59
    #7
    ....