Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET MVC Çoklu Dil Fonksiyonları – 2

Bir önceki, Asp.NET MVC Çoklu Dil Fonksiyonları – 1 başlıklı yazımda Asp.NET MVC’de çoklu dil fonksiyonlarına giriş yapmıştık.Varsayılan dil yapısına uygun olarak projemizi çalıştırıp yazımızı tamamlamıştık.Bu yazımızda ise, projemizde Türkçe, İngilizce ve Fransızca dillerinin yapısını oluşturup, yayınlamayı göreceğiz.

Önceki yazımızın devamı olarak aynı proje üzerinde çalışacağız.

Solution Explorer penceresinde projemizin son durumunu aşağıdaki gibi görmekteyiz.

Projemizin varsayılan dil yapısı “lang.resx” dosyasında bulunmaktaydı.Şimdi projemize, “lang.tr.resx” dosyasını ekleyelim.Bu dosyada, projemizin Türkçe dil yapısını oluşturacağız.Bir önceki yazımda Resource dosyalarının nasıl eklendiğinden bahsetmiştik gerçi ama burada yeniden özetliyorum.
“Add_GlobalResources” klasörüne sağ tıklayıp, “Add” sekmesinden “New Item” seçeneğini seçelim.Çıkan pencereden “Resources File” dosyasına tıklayalım.Resource dosyamızın adına “lang.tr.resx” yazalım ve “Add” butonunu işaretliyelim.

Resource dosyamızda “Name” alanına girdiğimiz anahtar değerler, projedeki diğer Resourceler ile aynı olmasına dikkat edelim.Sonuçta, seçilen dil yapısına göre, bu değerlere eşdeğer olan terimler ekranda gözükecektir.

Anımsarsanız, “Localization” ismindeki attribute sınıfımız içinde bulunan “OnActionExecuting” metodunda, “filterContext.RouteData.Values[“lang”]” koduyla adres çubuğundaki “lang” değişkeninin taşıdığı değeri alıyordu.Bu “lang” değişkenine bir değer göndermediğimiz zaman, “ResourceExtensions” isimdeki sınıfımız içinde bulunan “Language” metodumuz, uygulamamızda direkt “lang” ismindeki Resource dosyasını çalıştırıyordu.Eğer bu “lang” değişkenine “.tr” gibi bir değer gönderirsek, “lang.tr” ismindeki Resource dosyası çalıştırılacaktır ve uygulamamızın dile “.tr” olacaktır.

Ee haliyle biz uygulamamızın URL Routing sistemine, “lang” değerini tutan bir kalıp oluşturmalıyız.

Projemizin Global.asax dosyasına aşağıdaki gibi bir metod oluşturuyorum.

            routes.MapRoute("CokluDil",
                "{lang}/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );

Bu işlemi yaptıktan sonra projemizi başlatıyoruz.”Home(Controller)” ismindeki Controller sınıfımızın “Index” metodu çalıştırılıyor.(Bir önceki yazımızda bu Action metodu Localization attribute u ile işaretlemiş bulunmaktayız)

Tarayıcımızın adres çubuğuna “http://localhost:****/tr/Home” benzer bir URL yapısı girersek eğer, uygulamamızın dil yapısının Türkçe olduğunu göreceksiniz.

Aynı şekilde, “lang.en.resx” dosyası oluşturup, anahtar değerler karşılığı olarak İngilizce terimleri girelim ve aynı işlemleri yapalım.

“http://localhost:****/en/Home” URL yapısını giresek eğer, uygulamımızın dili bu sefer İngilizce olacaktır.

Bu yazımında sonuna gelmiş bulunmaktayız.Biraz uzun ve karmaşık olduğunun bende farkındayım ama elimden geldiği kadar anlaşılır biçimde bu konuyu sizlere sunmaya çalıştım.En azından uygulamamıza çoklu dil yapısı oluşturabilecek kadar bilgiler kazandık.Faydalanmanız dileğiyle..

İyi çalışmalar..

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Gürkan dedi ki:

    Öncelikle bu makaleler için tşk ederim. Yalnız çoklu dil yapısıyla ilgili MVC 4 de override hatası alıyorum.

    LocalizationWebFormView.cs hata aldığım class budur.

    • Gençay dedi ki:

      MVC 4 versiyonunda bu konuyla alakalı inheritance kavramındaki virtual metod yapıları değişik olduğundan dolayı sınıfı 4.0 a uygun bir hale getirdim.
      Aşağıdaki sınıfı “LocalizationWebFormView.cs” isimli sınıfla değiştirerek sorununuzu halledebilirsiniz.
      LocalizationWebFormView.cs

  2. Tayfun dedi ki:

    Hocam ben resources dosyalarımı classlibrary projesi açarak orda oluşturdum. resources dosyalrımı basıl gösterebilirim acaba

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir