Laravel – Birden fazla dili aktif olarak kullanma!

7 sene önce Beyazıt Kölemen tarafından yazılmıştır.-9.480 Okunma

Bugünlerde biraz yazı paylaşmanın vakti geldi galiba. Bu seferki yazımız Laravel üzerinde Multi Language olarak tüm sistemi kullanmak üzerine. Laravel üzerinde gelen Localization yada yerelleştirme olarak Türkçeye çevirdiğimiz statik dosyalarla ilk işimize başlayalım. Ardından 4 Farklı paketle tüm Laravel projemizi dinamik bir şekilde birden fazla dille yönetelim.

Altta paketleri anlatmadan önce küçük bir bilgi vermek istedim. Config/app.php dosyasında karşımıza iki tane parametre çıkıyor. Bunlardan birisi Locale bir diğeride fallback_locale değişkenleri. Fallback locale standart olarak tüm çevirileri yaptığınız dili seçmeniz gerekmektedir. Kısaca bu fallback locale eğer diğer dilde o kelimenin çevirisi yoksa ana dildeki çeviriyi almak için kullanılıyor. Örnek olarak Arapça ve İspanyolca dil seçenekleri olan bir projede bazı kelimeleri çevirmediyseniz, fakat İngilizce de tüm çeviriler tamamsa sistem Arapçadaki o kelime yerine ingilizcedeki kelimeyi alıyor.

1.Statik Dosyalar için Laravel Translation Manager

Statik dosyalar olarak tabir ettiğimiz şey Temalar üzerinde kullandığımız herhangi bir veritabanından gelmeyen, HTML ‘e direk gömdüğümüz metinleri çevirmek için kullanacağız.

Laravel Localization sistemi ile bunu statik olarak yapmamız mümkündü. Resources/lang klasöründe dillere göre klasörümüzü açıp, sabit php dosyaları ile tema üzerindeki statik metinleri değiştirmemiz mümkün. Fakat bu işlemde eğer tek tek dosya üzerinde değil de dinamik olarak değiştirmek için de bir translations manager eklentisi kolaylıkla düzeletebilirsiniz..

Laravel Translation Manager

Örnek olarak 3 farklı dil klasörü oluşturalım (en,ar,tr) gibi. Her klasörün içine mesaj.php diye bir dosya oluşturup bu dosyaya yazma izni verip, Translation Manager ile dil dosyalarımızı getirdiğimiz de 3 Farklı dilde aynı kelimeyi dinamik olarak yönetebiliriz.

Tema üzerinde de {{ __(mesaj.sliderslogan) }} gibi kullanmamız mümkün. Dinamik yapıda düzenlemeleri yaptıktan sonra bir sonraki aşamada ise Dillere göre rotalama ile devam edelim..

2. Rota Yönetimi ve Dinamik Dil kullanımı için Laravel Localization

Dillere göre rota oluşturma, gelen request üzerinden hangi dilin olduğunu anlama gibi ayarlamalar içinde Laravel Localization paketini kullanıyoruz.

Laravel Localization paketiyle site üzerinde bir menüyle direk olarak rotaları dillere göre değiştirebiliyoruz.

Yine bir üstteki Translation Manager paketiyle tüm dillere bir routes dosyası oluşturup, rotalardaki sabit değerleri de değiştirebiliyoruz. Örnek olarak siteadi/tr/ilan/22323 gibi “ilan” isminin sabit olduğu bir değişkeni de “ads” olarak  siteadi/en/ads/23232 gibi değiştirebiliyoruz.

Vendor:publish yaptıktan sonra config klasöründeki laravellocalization.php dosyasından başlarındaki // işaretlerini kaldırırarak belirtilen dilleri aktifleştirebilirsiniz. Paket içerisinde script,native gibi dil çevirilerine kullanabileceğimiz ekstra özellikler mevcut.

Bknz: Örnek rota gisti.

Yine config dosyasından standart olarak gelicek ilk dilde routedaki dil parametresini kaldırmak içinde hideDefaultLocale değerini true yapabilirsiniz. Yani siteniz örnek türkçe ve ana dilde fakat alternatif olarak ingilizce dili mevcut. Bu seçeneği aktifleştirdiğiniz de siteadi.com/ilan/23232 şeklinde türkçe gelirken diğer dillerde siteadi.com/en/ilan/23232 gibi ayarlayabilirsiniz.

Tema tarafında ise dil değiştirici için bu gisti kullanabilirsiniz.

3.Veritabanı tarafında farklı dilde içerikleri ekleyebilme – Dimsav/Translateble

Dinamik olarak yazdığınız içerikleri de birden fazla dil seçeneğinde yazmak için Dimsav’ın yazdığı Translateble eklentisini kullanabilirsiniz. Eklentinin kullanımıyla ilgili bilgi vermeden önce kısaca mantığını açıklıyım.

Örnek bir haber tablonuz var ve bu haber tablonuzda tüm değişkenler değil sadece Haber Başlığı, Haber Slug değeri ve Haber içeriği birden fazla ise sadece bu sütunları alarak haber_translations adında bir dosya daha oluşturuyoruz. Ve haber değerini girilen değeri 3 farklı dilde input doldurduktan sonra haber tablosuna ekleyip, haber_translations dosyasına ise haberin id si ve locale yani hangi dilse onun kısaltmasıyla veritabanına kayıt ediyoruz.

Model kısmında ise fillable değerlerinde ekstra birkaç düzenleme yapmamız gerekiyor. Değiştiriceğimiz yani multi language kısımlarını farklı yazmamız gerekicek.

Örnek Model Kullanımı aşağıdaki gibi iki farklı Modelle işi çözebiliyorsunuz.

4. Veritabanına verileri eklemek için geliştirilmiş Dil Formları – Translatable Bootforms

Herşeyi hazırladıktan sonra geldik veritabanına veri göndermeden önceki form işlemlerine. Bu işlemler içinde bir önceki yazımızda anlattığımız bootform eklentisinin extend versiyonu olarak Translatable bootform eklentisiyle formlarımızı artık dinamik olarak birden fazla dilde kullanabiliriz.

Örnek kullanım:

Yukarıdaki örnekte dillere göre Bootstrap Tabbed olayı yaptım.

Ek olarak edit kısmında ise tüm dilleri bind yapmak için de aşağıdaki kodu kullanabilirsiniz.

Sonuç:

4 Farklı paket ile oluşturduğumuz kombinasyonlarla şöyle bir sonuç elde ediyoruz.

1.Translatable Form ve Bootstrap Tabbed ile dinamik bir şekilde formlarımızı oluşturuyoruz.

2. Translatable Eklentisiyle hazırladığımız modelle verilerin nasıl kayıt edileceğini ayarlıyoruz.

3. Laravel Localization ile sistemde dilleri yönetmemizi sağlıyoruz.

4. Translation manager ile de statik verilerimizi düzeltmiş oluyoruz.


Örnek Kategori:

Örnek olarak yukarıdaki gibi 3 farklı dilde inputlarımızı hızlıca oluşturduk. Ve verilerimizi ekledik.


Verilerin gösterimi:

Türkçe:

İngilizce:

—-

Yukarıda url lerde gördüğünüz gibi 4 Eklentiyle dinamik bir şekilde tüm sistemi çevirmiş olduk.

Kullanımla ilgili karşılaştığınız sorunlar olursa yorum olarak yazabilirsiniz.

Saygılarımla.


Bonus: Arapça da yazım şekli soldan değilde sağda başladığı içinde ufak bir CSS eklemek gerekiyor.

Onuda bu şekilde halletmiş olduk.

İyi çalışmalar

, , ,

“Laravel – Birden fazla dili aktif olarak kullanma!” için 2 cevap

  1. Talha dedi ki:

    Beyazıt bey çok yardımcı oldunuz teşekkürler.

  2. Özkan KÜTÜK dedi ki:

    Hocam anlatım çok açıklayıcı, herşey için teşekkürler… neredeyse bitirmek üzereydim ancak dimsav/translatable 6x versiyonlarda çalışmıyor.
    – don’t install illuminate/support v5.8.31|don’t install laravel/framework v6.9.0

    bunun için bir çözüm var mı?

    teşekkürler…

Bir Cevap Yazın