Yeni bir site yapıyor ve site içerinse birden fazla dil seçeneği olmasını istiyorsanız. Bunu belli bir otomasyona bağlayarak, hem her dil için farklı bir dizin açmaktan hem de daha sonra ekleyecebileceğiniz farklı bir dil için en başa dönmekten kurtulabilirsiniz.Bu sistemi ilk geliştirdiğimde direk database ile çalışıyordum sonra DB performansını arttırması için XML desteği eklemiştim ilk önce genel yapıyı inceleyelim.Sitemizde 2 dil Türkçe ve İngilizce seçenekleri bulunsun. Bunun için databasede dil adında bir tablo oluşturarak ID,deger,turkce,ingilizce isimli 4 tane alan oluşturalım ID Otomatik sıralı veri diğerleri ise nvarchar alanı olsun maksimum 255 karakter olarak kullanıyorum ben, eğer büyük metinler içinde bu özelliği kullanacaksanız nvarchar(MAX) kullanabilirsiniz.
Dil Tablosu
Dil TablosuVerileri çekeceğimiz fonksiyonu oluşturalım;<%Function dilGetir(deger,dil)Dim getMyLangSet getMyLang= conn.Execute("Select * From dil Where deger='"&deger&"'")dilGetir = getMyLang(dil)getMyLang.CloseSet getMyLang = NothingEnd Function%>
Not: DB bağlantı adını conn olarak yazdım sizin kullandığınız bağlantı ismi farklıysa değiştirebilirsiniz.
Fonksiyondaki dil değerini ziyaretçinin seçeceği dil seçimi ile oluşturulan Session ile alıyoruz. Tabi siteye girildiğinde default dil değerini Sessiona atamanız gerekir. Sayfalarınızın en başına dil_secim.asp dosyasını include edin.dil_secim.asp içeriği;<%If Session("DIL") = "" ThenSession.Timeout = 200Session("DIL") = 2 ' Default Dil DeğeriEnd If%>
Burada eğer ziyaretçi siteye ilk defa giriyor ve dil seçimi yapmıyorsa default dil değeri oturuma atanır. 2 Türkçe 3 İngilizcedir. Bu numaralandırmanın içeriği ise DB tablo stunları isim ile değil sayı ile çağırılıyor, bu sistem asp deki Array sistemi ile aynıdır; ID(0), deger(1), turkce(2), ingilizce(3)… Farklı bir stün eklenirse bu böyle devam eder.Ziyaretçi dil seçecekse;Sayfanızda Türkçe | English linkleri olsun, link bağlantılarıda şöyle;Türkçe | English

ziyaretçi linke tıklayınca yönlendirilecek dosya dil_sec.asp içeriğini şöyle hazırlayın;
<%dil = Int(request.QueryString("dil"))Session.Timeout = 200Session("DIL") = dilresponse.Redirect("/")%>
Burada ziyaretçi dil linkine tıklayınca dil_sec.asp dosyasına gidiyor ve default değer verdiğimiz Session değerini değiştiriyor ve tekrar anasayfaya dönüyor.Not: Geldiği sayfaya dönmesi için kullandığınız referer_url veya kendi kullandığınız bir geri dönüş scripti kullanabilirsiniz.
Peki dili sayfaya nasıl yazdıracağız?Küçük bir örnekle, site menüsünü ele alalım.Anasayfa, Hakkımızda, Ürünler, Referanslar, İletişimsite içerisinde bu şekilde yazmamız gerekirken sisteme göre alttaki gibi yazıyoruz.<%=dilGetir("ANASAYFA",Session("DIL"))%> | <%=dilGetir("HAKKIMIZDA",Session("DIL"))%> | <%=dilGetir("URUNLER",Session("DIL"))%> | <%=dilGetir("REFERANSLAR",Session("DIL"))%> | <%=dilGetir("ILETISIM",Session("DIL"))%>
Bu tablomuza daha önce kaydettiğimiz verileri mevcut dil oturumuna göre tabloda çağırarak sayfaya yazdırıyor.Dil TablosuUzun süre bu sistemi kullandım sonra sürekli açılıp kapanan tablonun DB yavaşlığına sebep olacağını düşünerek, yönetim sayfasına dil değeri yüklerken kullandığım alana değerleri yükledikten sonra tüm değerleri XML olarak bir dizine kaydettim ve verileri DB den değil sabit bulunan XML dosyasından çekmeye başladım, bir sayfa içerisinde eğer 100’den fazla dil değeri çekiyorsanız bu hafife alınmayacak kalitede bir performans sağlıyor :)Yönetim sayfanıza XML bas isimli bir butondan bu tablodaki tüm değerleri XML’ye yazdırıp sitede hiç bir değişiklik yapmadan sadece fonksiyonu değiştirerek sayfaya yazdırmaya geçelim;Tüm verileri XML’ye yazdırıyoruz.<%set fso = createobject("scripting.filesystemobject")fso.DeleteFile request.ServerVariables("APPL_PHYSICAL_PATH") & "xmllanguage_pack_3.xml"Set act = fso.CreateTextFile(server.mappath("/xml/language_pack_3.xml"), true)act.WriteLine("“)act.WriteLine(““)act.WriteLine(““)Set rs1 = conn.Execute(“Select deger,ingilizce From dil “)While Not rs1.Eofact.WriteLine(“<"&rs1("deger")&">“)
rs1.MoveNextWendact.WriteLine(“
“)
act.WriteLine(“
“)
rs1.CloseSet rs1 = NothingSet fso = NothingSet act = Nothing%><%set fso = createobject("scripting.filesystemobject")fso.DeleteFile request.ServerVariables("APPL_PHYSICAL_PATH") & "xmllanguage_pack_2.xml"Set act = fso.CreateTextFile(server.mappath("/xml/language_pack_2.xml"), true)act.WriteLine("“)act.WriteLine(““)act.WriteLine(““)Set rs1 = conn.Execute(“Select deger,turkce From dil “)While Not rs1.Eofact.WriteLine(“<"&rs1("deger")&">“)
rs1.MoveNextWendact.WriteLine(“
“)
act.WriteLine(“
“)
rs1.CloseSet rs1 = Nothing%>%>

xml klasöründe;language_pack_2.xml ve language_pack_3.xml dil dosyaları oluşturduk.
Önceki fonksiyonumuzu şu şekilde değiştiriyoruz.<%'********** DIL CAGIR ***********Function getMyLang(deger,dil)set xmlDoc = CreateObject("MSXML.DOMDocument")xmlDoc.async = falsexmlDoc.setProperty "ServerHTTPRequest", truexmlDoc.load("http://www.site.com/xml/language_pack_"&dil&".xml")If (xmlDoc.parseError.errorCode <> 0) thencikti = “XML Error: ” & xmlDoc.parseError.reasonElseset channelNodes = xmlDoc.selectNodes(“//schema/*”)for each entry in channelNodesIf entry.tagName = deger thencikti = entry.textEnd IfNextend IfgetMyLang = ciktiEnd Function’********** DIL CAGIR ***********%>
Herşey bu kadar, xml’de tek dikkat etmeniz gereken husus deger alanına asp’deki değişkenler gibi muamele etmenizdir, sayı ve türkçe karakter kullanmamaya dikkat edin.Kod geliştirmeye açıktır, performans için kendi yeteneğinizi kullanabilirsiniz. Dil haricinde site genel ayarlarınıda bu şekilde kullanmanız mümkün.