19 Nisan 2008 Cumartesi

CUSTOM CULTURE

(Kaynak: http://www.yazilimuzmani.com/Articles/Details.aspx?aId=1000001031)

CUSTOM CULTURE

CultureAndRegionInfoBuilder classını kullanabilmek için uylamaya Sysglobl.dll in reference edilmesi gerekmektedir. Kişisel bir bölgesel ayar olusturabilmek için tüm yapmanız gereken CultureAndRegionInfoBuilder classının instance nı yaratarak var olan bir bölgesel ayar secmek ve CultureAndRegionModifiers degeri belirtmek..

CultureAndRegionModifiers Enum ları

Neutral =Bölgesel ayar değilde sadece var olan bir kültürü kullanmak istendiğinde.

None =Var olan kültürün min özelliğini kullanarak yeni bir kultur olusturmak istendiğinde.

Replacement=Var olan bir kültür ün özellikleri degiştirilmek istendiğinde.

Basit bir örnek asağıda gösterilmiştir.

CultureAndRegionInfoBuilder Demo=

new CultureAndRegionInfoBuilder("en-US",

CultureAndRegionModifiers.Neutral);

CultureInfo Culture = new CultureInfo("tr-TR");

RegionInfo Region = new RegionInfo("TR");

CultureAndRegionInfoBuilder Demo =

new CultureAndRegionInfoBuilder("tr_TR",

CultureAndRegionModifiers.Neutral);

Demo.LoadDataFromCultureInfo(Culture);

Demo.LoadDataFromRegionInfo(Region);

Simdi bir uygulamayla kendi kişisel bölgesel ayar ‘ımızı yaratalım..

private void button1_Click(object sender, EventArgs e)

{

CultureInfo usCulture = new CultureInfo("tr-TR");

RegionInfo usRegion = new RegionInfo("TR");

CultureAndRegionInfoBuilder demo =

new CultureAndRegionInfoBuilder("deneme",

CultureAndRegionModifiers.None );

demo.LoadDataFromCultureInfo(usCulture);

demo.LoadDataFromRegionInfo(usRegion);

//Parasal değer ve ondalık sayılarda virgülden sonra gelecek rakam sayısını belirlediğimiz kod bloğu

NumberFormatInfo numberInfo = new NumberFormatInfo();

numberInfo.CurrencySymbol = "%";

numberInfo.CurrencyDecimalDigits = 4;

demo.NumberFormat = numberInfo;

//Haftanın günlerini ve Tarih formatını belirleyen kod bloğu

DateTimeFormatInfo dateInfo = new DateTimeFormatInfo();

dateInfo.DateSeparator = ".";

dateInfo.DayNames = new String[] { "ilkGün", "ikinciGün",

"ÜcüncüGün", "DördüncüGün", "BeşinciGün", "AltıncıGün", "YedinciGün" };

dateInfo.ShortTimePattern = "mm-yyyy-dd";

demoBuilder.GregorianDateTimeFormat=dateInfo ;

demo.Register();

}

private void button12_Click(object sender, EventArgs e)

{

CultureInfo user = new CultureInfo("deneme");

RegionInfo regi = new RegionInfo("deneme");

textBox1.Text = user.DateTimeFormat.ShortTimePattern.ToString();

textBox2.Text = user.NumberFormat.PercentDecimalSeparator.ToString();

textBox3.Text = regi.CurrencySymbol.ToString();

textBox4.Text = user.NumberFormat.PercentDecimalDigits.ToString();

//user.DateTimeFormat.da

textBox5.Text = (100000).ToString("C");

String[] Günler = user.DateTimeFormat.DayNames ;

foreach (String Gün in Günler)

{

listBox1.Items.Add(Gün );

}

}

Sonuç Aşağıdaki Şekilde olacaktır...

Olusturduğumuz kişisel bölgesel ayarı Register yaptığımızda iki işlem gerceklesir bunlardan birincisi

C:\WINDOWS\Globalization klasörüne xx.nlp isimli bir dosya olusturur.İkinci işlem ise Registry de HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\IetfLanguage

Altına yeni bir key oluşturur...Biz olusturduğumuz kişisel bölgesel ayarı

Unregister methoduna tabi tutarak silebiliriz..Bu silme işleminde makinanın yaptığı işlem sadece olusturulan dosyanın adını değistirmekir..

CultureAndRegionInfoBuilder.Unregister("deneme");

Register ederek olusturduğumuz bu uygulamayı baska projelerde kullanabilmemiz için onu kaydetmeliyiz..Kaydetme işlemini iki şekilde yapabiliriz..

1. demo.Save(“c:\\xxx.ldml”);

(LDML= Locale Data Markup Language)

2. demo.Save(“c:\\xxx.xml”);

İnternet te olusturulmuz bir cok Kişisel Bölgesel ayar bulabilmeniz ve uygulamalarınızda kullanabilmeniz mümkündür.

Var olan bir Kişisel Bölgesel ayar ı uygulamanızda kullanmak için CultureAndRegionInfoBuilder clasının CreateFromLdml methodunu kullanmalısınız

CultureAndRegionInfoBuilder demo = CultureAndRegionInfoBuilder.CreateFromLdml(“deneme.ldml”);

Demo.Register();

yada

CultureAndRegionInfoBuilder demo = CultureAndRegionInfoBuilder.CreateFromLdml(“deneme.xml”);

Demo.Register();

Hiç yorum yok: