Merhabalar,
Bu yazımızda web siteleri için çoklu dil desteğinin oluşturulmasına ilişkin xml tabanlı veri tutan resource file ları kullanıyor olacağız.
.resx dosyaları içerisinde verileri key-value şeklinde tutarız.Oluşturacağımız Key değeri bizim uygulamamızda çağıracağımız parametre görevini görecektir. Projemize ekleyeceğimiz ilk .resx dosyası bizim default culture yani uygulama ayağa kalktığında sitenin son kullanıcıya göstereceği dile sahip verileri tutacak olan dosya olacaktır. Daha sonra ekleyeceğimiz .resx dosyalarına ekleyeceğimiz dile ait culture değerlerini ingilizce ise “.en-US”,fransızca ise “.fr-FR”,almanca ise “.de-DE” ispanyolca için “.es-MX” şeklinde uzantılar hazırlayarak isimlendiririz.
Örneğin ;
- Türkçe -> Resource.resx
- İngilizce -> Resource.en.resx
- Fransızca -> Resource.fr.resx
- Almanca -> Resource.de.resx
- İspanyolca -> Resource.es.resx
Şimdi örneğimize başlayalım.
1-) Visual studio da bir mvc projesi açıyoruz.
OK dedikten sonra gelen ekranda template olarak Basic seçerek devam edelim.
2-) Projemizin ana dll leri ve klasörüleri oluşmuş durumda.Herhangi bir veritabanı bağlantısı yapmadan normal bir şekilde siteyi ayağa kaldırmak için hazırlıyoruz. Bunun için öncelikle controller ekleyelim.
(Sıfırdan gelenler için; controller klasörüne sağ tık add controller diyerek ilerliyoruz)
Index action ı sonuçlarını görüntülemek için bir view ekliyoruz. (view sağ tık add view)
view için layout u da seçtiğimize göre dil seçimine uygun küçük bir tasarım yapalım.
3-) Şimdi dil değişimleri için kullanacağımız modellerimizi yazıyoruz. Yazılacak olan tüm controller larda geçerli olması için controller dan türeyen bir başka controller yazıyoruz.
SiteBaseController sınıfı sayesinde controller lar ilk çalıştıklarında cookie de olan dil bilgisini referans alarak sitenin dilini değiştirmeye yardımcı olacaktır.
Birde SiteLanguage sınıfı oluşturuyoruz,burada cookie ye gönderilecek olan değerleri belirliyor olacağız. Language isimli sınıfta dile ait olan isim ve culture da tutulacak olan değerini tutacak property ler vardır.
4-) Controller ımızda da gerekli değişiklikleri yapalım.
Home controller ımız burada referans olarak SiteBaseController ı almış oldu. Sitedeki dil değiştirme işlemi başlatacak olan Action ımızda ChangeLanguage olacak. Buraya gönderilecek olan parametrelere göre resources tan okuma yapılacak.
5-) _Layout ta methodları çalıştıracak olan anchor ları ve gönderecekleri parametreleri de aşağıdaki gibi düzenliyoruz.
6-) Sıra geldi resourse dosyalarını kullanmaya.
Projeye öncelikle Resource isminde bir klasör ekleyelim. .resx dosyalarını bunun altına toplayacağız. Daha sonrada 4 tane resource file ekleyelim.
Ekledikten sonra da key ve value larını belirliyoruz ;
Resources dosyalarının access modifier larını PUBLIC olarak işaretliyoruz. Şimdi de ara yüzümüzde bu key leri olması gereken yerlere yazıyoruz;
Projemizi tekrar debug ediyoruz ;
projemizde çoklu dil desteğini sağlamış bulunuyoruz. iyi çalışmalar herkese.
Detaylı ve akıcı anlatım olmuş.
Emeğinize sağlık.
BeğenBeğen
Teşekkür ederim Hasan Bey 🙂
BeğenBeğen
Merhabalar öncelikle makale için teşekkür ederim.
Uygulamaya çalıştım ancak problem yaşıyorum, yardım ederseniz sevinirim.
1. “Birde ‘SiteLanguage’ sınıfı oluşturuyoruz” demişsiniz = acaba SiteLanguages mi olacaktı.
2. foreach (var item in xxxApp.Models.Language.SiteLanguages.AvailableLanguage) bu kullanım için hata alıyorum. language içinde site languages yok vs.
Örnek kod gönderirseniz daha yardım cı olacak sanırım.
BeğenBeğen
yorumlarınızı yeni gördüm Ahmet hocam, onaya düşüyor önce, ben görünce aktif oluyor yorumlar. o projeyi silmişim direkt onu gönderecektim yoksa, yazdığınız projeyi gönderin isterseniz bakayım ya da team viewer verin bağlanıp bakayım hocam.
BeğenBeğen
yorumları silerek insanlara yardımcı oluyorsunuz galiba?
BeğenBeğen
5. Adımın temiz hali var mı?
BeğenBeğen
Arkadaşlar vakit bulabildim, vs 2015 te yazdığım kodu yazıyı tekrar okuyarak vs 2019 da dotnet versiyon 4.7.2 seçili iken tekrar yazdım.
Mail adresinizi paylaşırsanız projeyi olduğu gibi gönderebilirim.
BeğenBeğen
Acik kodlarida paylasirmisiniz.Ciddi hatalari var.Malesef calismiyor…
BeğenBeğen
ciddili hata 🙂 mail adresinizi paylaşın hocam, yardımcı olalım 🙂
BeğenBeğen
Emeğiniz için teşekkürler. Mail adresimi paylaşıyorum projeyi gönderebilirseniz sevinirim.
BeğenBeğen
Gönderilmiştir 🙂
BeğenBeğen
Bir konu bu kadar karışık anlatılabilir 😦 Yaptıklarınızı göstermişsiniz sadece anlatmamışsınız maalesef. Biraz bilgim olduğu için bir noktaya kadar geldim fakat foreachteki MVCResources kısmını bile aynı şekilde yazmaya çalışan olacaktır. Projeyi ekleseniz ziyaret edenler için daha verimli bir kaynak olabilir. Emeğinize sağlık buarada. Kötülemiyorum yaptığınız işi eleştiriyorum sadece, yanlış anlamayın.
BeğenBeğen
Hangi kısmı anlatmamı bekliyordunuz da anlatmamışım ? mail adresinizi bırakın hocam yeni projeyi göndereyim.
BeğenBeğen
Hocam bende alabilirsem çok sevinirim,
BeğenBeğen
Mail adresi bıraksaydın keşke hocam, 15 gün sonra gönderirim projeyi.
BeğenBeğen
Kaynak dosyalarını alma şansım varmı?
BeğenBeğen
Bilgi için teşekkürler. Kodları alabilirmiyim ?
BeğenBeğen
Merhaba Erol Bey, anlatımınız için teşekkürler.
Banada projeyi gönderir misiniz?
alasbusra@gmail.com
BeğenBeğen
Selamlar, projenin son halini bende alabilir miyim ?
yselimkarakas@gmail.com
BeğenBeğen
Merhaba kolay gelsin proje duruyorsa email adresime gönderebilirmisiniz.
BeğenBeğen