
ASP.NET'te coklu dil destegi vermek icin size kod tekrarini onleyecek bir yapidan bahsetmek istiyorum. Bildiginiz gibi resource dosyalarini kullanarak asp.net icin coklu dil destegini saglayabiliyorsunuz. Yapmaniz gereken uygun isimde resx dosyalarini Global Resources ya da Local Resources klasorleri altina eklemek ardindan da secilen dil icin sayfanin Culture ve UICulture ozelliklerini ayarlamak. Bunun icin benim kullandigim(yazdigim) bir LanguageManager kutuphanesinden bahsedecegim. Yaptigi is basit olarak verilen sayfanin culture ozelliklerini ayarlamak. Ornekten de goreceginiz gibi bir adet siniftan olusuyor.. Kodu genel olarak anlatmayacagim, basit bir yapi var gorulecegi uzere.. LanguageManager'in dil destegi icin kullandigi yapi dil bilgisini session'da tutmasi.. Normalde dil enumeration bilgisi bu class icinde yer almamali ancak kodun calistirilabilir bir durumda olmasi icin bu sinifin icerisine ekledim. Dikkat edilirse ApplyLanguage metodu virtual bir metod ve eger isterseniz bu sinifi inherit ederek dili ister veritabanindan isterseniz cookieden ya da istediginiz herhangi bir servisten okuyacak hale getirebilirsiniz. Bu amacla dispose metodu da virtual olarak set edilmistir ancak Session info icin dispose gerekmiyor o yuzden icerigi bos birakildi ancak ornegin dil bilgisini veritabanindan okursaniz dispose da veritabani baglantisini kapatma islemini yapabilirsiniz..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Threading;
using System.Globalization;
namespace Acquistor.Managers
{
public class LanguageManager : IDisposable
{
private System.Web.UI.Page Page;
public enum Language
{
TR,
EN
}
public LanguageManager(System.Web.UI.Page Page)
{
this.Page = Page;
}
public virtual void ApplyLanguage()
{
if (Page.Session["Language"] == null)
{
Page.Session["Language"] = Language.TR.ToString();
}
switch (Page.Session["Language"].ToString())
{
case "TR":
SetPageCulture("tr", "tr-TR");
break;
case "EN":
SetPageCulture("en", "en-US");
break;
default:
SetPageCulture("tr", "tr-TR");
break;
}
}
private void SetPageCulture(string uiCulture, string culture)
{
Page.UICulture = uiCulture;
Page.Culture = culture;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(uiCulture);
}
#region IDisposable Members
public virtual void Dispose()
{
}
#endregion
}
}
Gelelim bu kodu nasil kullanacaksiniz.. Tabii ki dilini guncellemek istediginiz sayfanin InitializeCulture metodunu override ederek, ama benim tavsiyem genelde tum sayfalarinizda bunu yapmak isteyeceginizi dusundugumden bu isi tanimlayacaginiz base page icerisinde yapmaniz ve sayfalarinizi bu base pageden inherit etmeniz. Boylece tek bir yerden butun sayfalariniza coklu dil destegini vermis olursunuz. Hemen nasil kullanabileceginizi de ufak bir kod ile gostermeye calisayim...
protected override void InitializeCulture()
{
using (LanguageManager lm = new LanguageManager(Page))
{
lm.ApplyLanguage();
}
base.InitializeCulture();
}
Umarim isinize yarar.. Herkese kolay gelsin.