﻿
{"id":1269,"date":"2013-01-18T15:32:30","date_gmt":"2013-01-18T15:32:30","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1269"},"modified":"2015-10-21T11:27:45","modified_gmt":"2015-10-21T11:27:45","slug":"mvcde-languagesessioncontrol-attirbuteu-yazmak","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/mvcde-languagesessioncontrol-attirbuteu-yazmak\/","title":{"rendered":"MVC&#8217;de LanguageSessionControl Attribute&#8217;u Yazmak"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>\u00c7oklu dil deste\u011fi veren MVC projelerinde kullan\u0131c\u0131ya dil se\u00e7imi yapt\u0131rmak i\u00e7in sistemimiz de bulunan dil dosyalar\u0131n\u0131 projemizin g\u00f6rsel k\u0131sm\u0131nda listeletmemiz ve kullan\u0131c\u0131n\u0131n dil se\u00e7imine b\u0131rakabilmemiz i\u00e7in, her sayfada kullan\u0131c\u0131 talebinden sonra \u00e7al\u0131\u015fan Action metodumuzda dil dosyalar\u0131n\u0131 veritaban\u0131nda \u00e7ekmek gibi bir derdimiz olacakt\u0131r.Bu durumdan kurtulman\u0131n yollar\u0131ndan biriside LanguageSessionControl ismini verdi\u011fimiz Attribute&#8217;u yazmak olacakt\u0131r.<br \/>\n<!--more-->Bu Attribute sayesinde bir Session olu\u015fturulur ve dil dosyalar\u0131 bir kere \u00e7ekildikten sonra her bir kullan\u0131c\u0131ya g\u00f6sterilir.<\/p>\n<p>Sitemize binlerce ki\u015fi girecek, bu Session de\u011feri binlerce kez mi olu\u015fturulacak? diye sorarsan\u0131z e\u011fer hay\u0131r.Herkes i\u00e7in ortak bir i\u015flem olaca\u011f\u0131ndan dolay\u0131, StringDictionary s\u0131n\u0131f\u0131ndan \u00fcretilen bir nesne sayesinde bu Session nesnesi tek seferde herkes i\u00e7in \u00fcretilecektir.<\/p>\n<p>Bu Attribute&#8217;un \u00f6nem te\u015fkil etti\u011fi nokta zaten buras\u0131d\u0131r.Sonu\u00e7ta Session olu\u015fturulurken, sistemdeki dil dosyalar\u0131 bir listeye \u00e7ekilmektedir.Ee bunu her kullan\u0131c\u0131 i\u00e7in bir kere yapsayd\u0131 e\u011fer \u00e7al\u0131\u015ft\u0131r\u0131lan her Action metod da dil dosyalar\u0131n\u0131 listeletmemiz daha performansl\u0131 olurdu.Ancak bir kere sistem ad\u0131na \u00fcretilen Session de\u011ferinde dil dosyalar\u0131 mevcut olacak ve her kullan\u0131c\u0131ya g\u00f6sterilecektir.<\/p>\n<p>Bu konuyu daha detayl\u0131 bir \u015fekilde irdelemek i\u00e7in bir \u00f6rnek yapaca\u011f\u0131m.Bir MVC projesi olu\u015fturup, i\u00e7inde T\u00fcrk\u00e7e ve \u0130ngilizce dil dosyalar\u0131 olu\u015fturaca\u011f\u0131m.Daha sonra bu dosyalar\u0131 olu\u015fturdu\u011fum projemde kullan\u0131c\u0131ya dil se\u00e7tirme i\u015flemlerini(LanguageSessionControl) yapt\u0131rmak i\u00e7in Attribute yazaca\u011f\u0131m.<\/p>\n<p>Tabi, MVC projesi olu\u015fturmay\u0131, dil yap\u0131lar\u0131n\u0131 eklemeyi ve sisteme i\u015flemeye ben burada de\u011finmeyece\u011fim.Onlar\u0131 sizlere b\u0131rak\u0131yorum.<\/p>\n<p>Haliyle bu yaz\u0131y\u0131 daha iyi anlayabilmeniz i\u00e7in, <a href=\"http:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-coklu-dil-fonksiyonlari\" target=\"_blank\">Asp.NET MVC \u00c7oklu Dil Fonksiyonlar\u0131 \u2013 1<\/a> ve <a href=\"http:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-coklu-dil-fonksiyonlari-2\" target=\"_blank\">Asp.NET MVC \u00c7oklu Dil Fonksiyonlar\u0131 \u2013 2<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131lar\u0131m\u0131 okuman\u0131z\u0131 tavsiye ederim.<\/p>\n<p>\u00d6rne\u011fimize ba\u015flamadan \u00f6nce LanguageSessionControl Attribute&#8217;unu yazarken kullanaca\u011f\u0131m\u0131z <a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvcde-languagesessioncontrol-attirbuteu-yazmak.html\/switchlanguagehelper\" rel=\"attachment wp-att-1280\">SwitchLanguageHelper<\/a>\u00a0isimli s\u0131n\u0131f\u0131 buradan indirebilirsiniz.<\/p>\n<p>Evet \u015fimdi elimizde bir MVC projesi mevcut ve T\u00fcrk\u00e7e &#8211; \u0130ngilizce dil deste\u011fi veriyor.Veritaban\u0131nda kendi olu\u015fturdu\u011fumuz bir tabloda Resource dosyalar\u0131n\u0131n kay\u0131tlar\u0131da mevcut.Ben &#8220;Diller&#8221; ad\u0131nda bir tabloda bu kay\u0131tlar\u0131 tutuyorum.(ID, DilAdi, DilKodu, DilDosyasi \u015feklinde d\u00f6rt kolonum mevcut)<\/p>\n<p>Bu dil yap\u0131lar\u0131n\u0131 kullan\u0131c\u0131lara se\u00e7im yapabilmeleri i\u00e7in Attribute&#8217;umuzu yazal\u0131m.&#8221;LanguageSessionControlAttribute&#8221; ad\u0131nda bir s\u0131n\u0131f olu\u015fturuyorum ve &#8220;ActionFilterAttribute&#8221; s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m ald\u0131r\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class LanguageSessionControlAttribute : ActionFilterAttribute\r\n    {\r\n        public static StringDictionary DilSession = new StringDictionary();\r\n        public override void OnActionExecuting(ActionExecutingContext filterContext)\r\n        {\r\n            if (DilSession.Count == 0)\r\n            {\r\n                VeritabaniDataContext Veri = new VeritabaniDataContext();\r\n                var Diller = Veri.Dillerims;\r\n                foreach (var item in Diller)\r\n                {\r\n                    DilSession.Add(item.DilKodu, item.DilAdi);\r\n                }\r\n            }\r\n            base.OnActionExecuting(filterContext);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;LanguageSessionControlAttribute&#8221; isimli Attribute&#8217;umuzu yazm\u0131\u015f olduk.\u0130ncelerseniz e\u011fer, static yap\u0131da StringDictionary tipinden DilSession isminde bir nesnemiz mevcut.\u0130\u015fte bu nesne sayesinde her bir kullan\u0131c\u0131 i\u00e7in tek ve ayn\u0131 Session de\u011feri a\u00e7m\u0131\u015f oluyoruz.<\/p>\n<p>OnActionExecuting isimli metoddan bahsetmemiz gerekirse e\u011fer, bu metod <a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-attribute-olusturma\" target=\"_blank\">MVC Attribute Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131m\u0131zda \u00f6rneklendirdi\u011fimiz gibi, bu metodu override eden Attribute&#8217;un, kullan\u0131ld\u0131\u011f\u0131 class ya da Action metod \u00e7al\u0131\u015ft\u0131r\u0131lma talebi geldi\u011fi anda, \u00f6nce bu metod \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r.Daha sonra, Action metod \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r.<\/p>\n<p>OnActionExecuting metodu i\u00e7inde, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi baz\u0131 kontroller i\u00e7inde veritaban\u0131m\u0131zdaki dil yap\u0131lar\u0131 DilSession ismindeki StringDictionary nesnemize eklenmektedir.<\/p>\n<p>S\u0131ra bu dil dosyalar\u0131n\u0131 kullan\u0131c\u0131 bazl\u0131 yay\u0131nlamada.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;% foreach (DictionaryEntry item in LanguageSessionControlAttribute.DilSession)\r\n   {%&gt;\r\n&lt;%: Html.LanguageSelectorLink(item.Key.ToString(), &quot;&#x5B;&quot; + item.Value.ToString() +&quot;]&quot;,item.Value.ToString(),null) %&gt;\r\n&lt;%  } %&gt;\r\n<\/pre>\n<p>E\u011fer projemizi son haliyle derleyip \u00e7al\u0131\u015ft\u0131r\u0131rsak, &#8220;LanguageSessionControlAttribute&#8221; isimli Attribute ile i\u015faretledi\u011fimiz herhangi bir Controller katman\u0131nda ki, herhangi bir Action metod \u00e7al\u0131\u015ft\u0131\u011f\u0131nda dil se\u00e7enekleri gelecektir.<\/p>\n<p>Herhangi bir Controller ya da Action metod \u00fczerinde &#8220;LanguageSessionControlAttribute&#8221; Attribute&#8217;unu a\u015fa\u011f\u0131daki gibi tan\u0131mlayabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&#x5B;LanguageSessionControl]\r\n<\/pre>\n<p>Benim \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m projenin son halinin ekran g\u00f6r\u00fcnt\u00fcs\u00fc a\u015fa\u011f\u0131daki gibidir.<\/p>\n<table style=\"width: 100%;\">\n<tbody>\n<tr>\n<td>\u00a0<a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvcde-languagesessioncontrol-attirbuteu-yazmak.html\/dilsecim1\" rel=\"attachment wp-att-1286\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1286\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/DilSecim1.png\" alt=\"DilSecim1\" width=\"538\" height=\"69\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/DilSecim1.png 538w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/DilSecim1-300x38.png 300w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, T\u00fcrk\u00e7e dil se\u00e7ene\u011fi se\u00e7iliyken kodlarda ayarlad\u0131\u011f\u0131m\u0131z gibi bir \u015fekilde [T\u00fcrk\u00e7e] olarak gelmektedir.URL yap\u0131s\u0131n\u0131da g\u00f6rmektesiniz.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvcde-languagesessioncontrol-attirbuteu-yazmak.html\/dilsecim1-2\" rel=\"attachment wp-att-1287\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1287\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/DilSecim11.png\" alt=\"DilSecim1\" width=\"581\" height=\"69\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/DilSecim11.png 581w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/01\/DilSecim11-300x35.png 300w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td>\u00a0\u0130ngilizce dil linkine t\u0131klad\u0131\u011f\u0131m\u0131z zaman ki durumu g\u00f6rmektesiniz.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Yaz\u0131m\u0131z\u0131n konusu olan &#8220;LanguageSessionControlAttribute&#8221; isimli Attribute&#8217;u yazmay\u0131 ve projemizde ki dil dosyalar\u0131n\u0131 kullan\u0131c\u0131lar\u0131m\u0131za listeleme ve se\u00e7tirme i\u015flemlerini buraya kadar halletmi\u015f bulunmaktay\u0131z.Son olarak \u015funlar\u0131 s\u00f6yl\u00fcyorum ki,\u00a0<a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvcde-languagesessioncontrol-attirbuteu-yazmak.html\/switchlanguagehelper\" rel=\"attachment wp-att-1280\">SwitchLanguageHelper<\/a>\u00a0s\u0131n\u0131f\u0131nda Global.asax dosyas\u0131nda kullanaca\u011f\u0131n\u0131z URL Routing \u015femas\u0131n\u0131n ad\u0131n\u0131 baz\u0131 parametrelerde de\u011fi\u015ftirmeniz gerekiyor.E\u011fer bu s\u0131n\u0131f\u0131 incelerseniz o parametreleri rahatl\u0131kla bulup de\u011fi\u015ftirebilirsiniz.<\/p>\n<p>Faydalanman\u0131z dile\u011fiyle..<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>\u00c7oklu dil deste\u011fi veren MVC projelerinde kullan\u0131c\u0131ya dil se\u00e7imi yapt\u0131rmak i\u00e7in sistemimiz de bulunan dil dosyalar\u0131n\u0131 projemizin g\u00f6rsel k\u0131sm\u0131nda listeletmemiz ve kullan\u0131c\u0131n\u0131n dil se\u00e7imine b\u0131rakabilmemiz i\u00e7in, her sayfada kullan\u0131c\u0131 talebinden sonra \u00e7al\u0131\u015fan Action metodumuzda&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[746,313,332,283],"class_list":["post-1269","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-asp-net-mvc","tag-attribute","tag-languagesessioncontrol","tag-mvc"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=1269"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1269\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}