(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();
19 Nisan 2008 Cumartesi
GLOBALIZATION
(Kaynak: http://www.yazilimuzmani.com/Articles/Details.aspx?aId=1000001030)
GLOBALIZATION
Günümüzde yapılan uygulamaların kullanım bölgeleri hızla çoğalmakta.Ulkeler arasında
Ø Tarih formatları(dd/MM/YYYY),
Ø Parasal semboller(YTL,$),
Ø Dil,
Ø Rakam Formatları (100,00 YTL)
Farklılık gösterdiğinden dolayı bir uygulama diğer bir ülkede kullanılırken sorun çıkarabilmektedir.
Yapılan bir uygulamaları bölgelere,ülkelere göre uyarlamak ,O bölgeye uygun bi şekilde yapmaktan daha maliyetli olmaktadır. .Net Framework yazılımcılara bu konuda yardımcı olabilmek için System.Globalization namespace sini gelişmiştir
System.Globalization namespace sinde baslıca
· CultureInfo
· RegionInfo
· DateTimeFormatInfo
· NumberFormatInfo
Class ları bulunmaktadır...Bu makale dizisinde tüm bu class lara örneklerle değineceğim..
CultureInfo sınıfı bize uygulamanın çalıştırıldığı platformun kültürel dili,yazı ve rakam formatı,tarih formatı gibi bilgileri verir.
Bir platformun Bölgesel ayarlarını aşağıdaki şekilde öğrenebiliriz (CurrentCulture).
private void button1_Click(object sender, EventArgs e)
{
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
textBox1.Text ="The current culture of this application is : " +UsersCulture.Name;
textBox2.Text ="The Display Name of this application is : " +UsersCulture.DisplayName;
textBox3.Text ="The Native Name of this application is : " + UsersCulture.NativeName;
textBox4.Text ="The ISO Abbreviation of this application is : " +UsersCulture.TwoLetterISOLanguageName;
}
CultureInfo sınıfının GetCultures method unu kullanarak tüm bölgesel ayar adlarını görebiliriz.Bu method CultureType türünde bir değişken istemektedir.
CultureTypes
AllCultures : Tüm kültür isimleri
FrameworkCultures : .Net Framework deki tüm bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
InstalledWin32Cultures : Windows işletim sistemindeki tüm bölgesel ayar isimleri
ReplacementCultures : Var olan bir kültürü editleyerek kullanıcının oluşturduğu bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
Specific Cultures : Ülkeye ait specific bölgesel ayar isimleri
UserCustom Cultures : Kullanıcı Tarafından yaratılmış olan bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
WindowsOnly Cultures : .Net Frameworkte olmayıp windos ta olan bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
foreach (CultureInfo UsersCulture in
CultureInfo.GetCultures(CultureTypes.AllCultures ))
{
comboBox1.Items.Add (UsersCulture.Name);
}
Örnek Olarak Yazdığınız uygulamanın bir kısmında çalışanlara verilen maaşı gösterdiniz..Türkiye’de olduğumuz için bu para miktarının sonunda YTL yazmalı bunu yapabilmenin ilk yolu şudur.
tbMaas.Text = "YTL100,000.00";
Ancak bu yolla yapılan bir code bloğu eger sizin yaptığınız uygulama yurtdısında kullanılacaksa yada para birimi olarak Euro kullanılacaksa tüm kodları degiştirmeniz gerekecek ve dolayısıyla size sorun yaşatacaktır(Hard Coding).. .
tbMaas.Text = (100000).ToString("C");
Codebloğunu kullanarak yaptığımızda sistemin Culture değerini çekerek otomatik olarak kullanılan para degerini ve hatta kurus degeri için virgülden sonra kaç değer konulacağını ayarlayacaktır...
CultureInfo Classının DateTimeFormat propertisini kullanarak uygulamada geçerli olan bölgesel ayarın gün lerini listeleyebiliriz.
CultureInfo UsersCulture = new CultureInfo("tr-TR");
String[] Days = UsersCulture.DateTimeFormat.DayNames;
foreach (String Day in Days)
{
listBox1.Items.Add("Day Names for " + UsersCulture.Name + " : " + Day);
}
Aşağıdaki uygulamada yine CultureInfo Classının DateTimeFormat propertisini kullanarak uygulamada geçerli olan bölgesel ayarın ay isimlerini listelenişi gösterilmektedir.
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
String[] Months = UsersCulture.DateTimeFormat.MonthNames;
foreach (String Month in Months)
{
listBox1.Items.Add("Month Names for " + UsersCulture.Name + " : " + Month);
}
Aşağıdaki uygulamada CultureInfo Classının DateTimeFormat propertisini kullanarak uygulamada geçerli olan bölgesel ayarın parasal değeri,tarih formatı,ayraç ve kuruş degeri için virgülen sonra kac değer geleceğinin listelenişi gösterilmektedir
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
textBox1.Text = (UsersCulture.Name + "CurrencySymbol : "
+ UsersCulture.NumberFormat.CurrencySymbol);
textBox2.Text = ("NumberDecimalSymbol : "
+ UsersCulture.NumberFormat.CurrencyDecimalSeparator );
textBox3.Text ="DateFormat :" + UsersCulture.DateTimeFormat.ShortDatePattern.ToString();
textBox4.Text = "CurrencyDecimalDigits :" + UsersCulture.NumberFormat.CurrencyDecimalDigits.ToString() ;
Aşağıda Uygulamada kullanılan, geçerli olan bir bölgesel ayarı Spanish/Venezuela Bölgesel ayarına degiştirmek için.. gerekli olan code bloğu gösterilmektedir..
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
MessageBox.Show("The current culture of this application is : "
+ UsersCulture.Name);
//
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-VE");
MessageBox.Show("The current culture of this application is : "
+ Thread.CurrentThread.CurrentCulture);
İsletim sisteminizde gecerli olan Bölgesel ayarları gözlemleyip, degiştirebilmenizin bir diğer yolu aşagıda gösterilmiştir..
Start/Settings/ControlPanel/Regional and Language Options
CultureInfo class ında sınıfının LCID (Local ID)ve Name olarak iki özellige bulunmaktadır.
private void button1_Click(object sender, EventArgs e)
{
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
MessageBox.Show(UsersCulture.LCID.ToString());
MessageBox.Show(UsersCulture.Name);
}
Yukarıdaki örnekte geriye dönen her iki değerde aynı Bölgesel Ayar verilerine erişmemizi şağlayacaktır..
RegionInfo class’ı, CultureInfo class ‘ının nazaran Bir ülke yada bölge hakkında daha specific ,bilgileri barındırır.
RegionInfo class’ının kullanımı aşagıdaki örnekte gösterilmiştir..
private void button1_Click(object sender, EventArgs e)
{
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture ;
RegionInfo DemoRegion = new RegionInfo(UsersCulture.LCID );
//RegionInfo DemoRegion = new RegionInfo("tr-TR");
textBox1.Text = ("English Name: " + DemoRegion.EnglishName);
textBox2.Text = ("Display Name: " + DemoRegion.DisplayName);
textBox3.Text = ("Currency Symbol: " + DemoRegion.CurrencySymbol);
textBox4.Text = DemoRegion.CurrencyNativeName.ToString();
textBox5.Text = DemoRegion.ISOCurrencySymbol.ToString();
textBox13.Text = DemoRegion.NativeName.ToString();
}
Su ana kadar yapılan uygulamalarda var olan Bölgesel ayarları kullandık; Framework 2.0 la gelen UserCustom Cultures ile bunların dısında kendi kişisel bölgesel ayarlarımızı oluşturabiliriz..Kendimize özgü bir takvim,tarih formatı.... ve hatta bu Kişisel Bölgesel Ayarları diğer uygulamalarımızdada kullanılabilir bir hala getirebiliriz.
GLOBALIZATION
Günümüzde yapılan uygulamaların kullanım bölgeleri hızla çoğalmakta.Ulkeler arasında
Ø Tarih formatları(dd/MM/YYYY),
Ø Parasal semboller(YTL,$),
Ø Dil,
Ø Rakam Formatları (100,00 YTL)
Farklılık gösterdiğinden dolayı bir uygulama diğer bir ülkede kullanılırken sorun çıkarabilmektedir.
Yapılan bir uygulamaları bölgelere,ülkelere göre uyarlamak ,O bölgeye uygun bi şekilde yapmaktan daha maliyetli olmaktadır. .Net Framework yazılımcılara bu konuda yardımcı olabilmek için System.Globalization namespace sini gelişmiştir
System.Globalization namespace sinde baslıca
· CultureInfo
· RegionInfo
· DateTimeFormatInfo
· NumberFormatInfo
Class ları bulunmaktadır...Bu makale dizisinde tüm bu class lara örneklerle değineceğim..
CultureInfo sınıfı bize uygulamanın çalıştırıldığı platformun kültürel dili,yazı ve rakam formatı,tarih formatı gibi bilgileri verir.
Bir platformun Bölgesel ayarlarını aşağıdaki şekilde öğrenebiliriz (CurrentCulture).
private void button1_Click(object sender, EventArgs e)
{
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
textBox1.Text ="The current culture of this application is : " +UsersCulture.Name;
textBox2.Text ="The Display Name of this application is : " +UsersCulture.DisplayName;
textBox3.Text ="The Native Name of this application is : " + UsersCulture.NativeName;
textBox4.Text ="The ISO Abbreviation of this application is : " +UsersCulture.TwoLetterISOLanguageName;
}
CultureInfo sınıfının GetCultures method unu kullanarak tüm bölgesel ayar adlarını görebiliriz.Bu method CultureType türünde bir değişken istemektedir.
CultureTypes
AllCultures : Tüm kültür isimleri
FrameworkCultures : .Net Framework deki tüm bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
InstalledWin32Cultures : Windows işletim sistemindeki tüm bölgesel ayar isimleri
ReplacementCultures : Var olan bir kültürü editleyerek kullanıcının oluşturduğu bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
Specific Cultures : Ülkeye ait specific bölgesel ayar isimleri
UserCustom Cultures : Kullanıcı Tarafından yaratılmış olan bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
WindowsOnly Cultures : .Net Frameworkte olmayıp windos ta olan bölgesel ayar isimleri (Framework 2.0 ile gelen özellik)
foreach (CultureInfo UsersCulture in
CultureInfo.GetCultures(CultureTypes.AllCultures ))
{
comboBox1.Items.Add (UsersCulture.Name);
}
Örnek Olarak Yazdığınız uygulamanın bir kısmında çalışanlara verilen maaşı gösterdiniz..Türkiye’de olduğumuz için bu para miktarının sonunda YTL yazmalı bunu yapabilmenin ilk yolu şudur.
tbMaas.Text = "YTL100,000.00";
Ancak bu yolla yapılan bir code bloğu eger sizin yaptığınız uygulama yurtdısında kullanılacaksa yada para birimi olarak Euro kullanılacaksa tüm kodları degiştirmeniz gerekecek ve dolayısıyla size sorun yaşatacaktır(Hard Coding).. .
tbMaas.Text = (100000).ToString("C");
Codebloğunu kullanarak yaptığımızda sistemin Culture değerini çekerek otomatik olarak kullanılan para degerini ve hatta kurus degeri için virgülden sonra kaç değer konulacağını ayarlayacaktır...
CultureInfo Classının DateTimeFormat propertisini kullanarak uygulamada geçerli olan bölgesel ayarın gün lerini listeleyebiliriz.
CultureInfo UsersCulture = new CultureInfo("tr-TR");
String[] Days = UsersCulture.DateTimeFormat.DayNames;
foreach (String Day in Days)
{
listBox1.Items.Add("Day Names for " + UsersCulture.Name + " : " + Day);
}
Aşağıdaki uygulamada yine CultureInfo Classının DateTimeFormat propertisini kullanarak uygulamada geçerli olan bölgesel ayarın ay isimlerini listelenişi gösterilmektedir.
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
String[] Months = UsersCulture.DateTimeFormat.MonthNames;
foreach (String Month in Months)
{
listBox1.Items.Add("Month Names for " + UsersCulture.Name + " : " + Month);
}
Aşağıdaki uygulamada CultureInfo Classının DateTimeFormat propertisini kullanarak uygulamada geçerli olan bölgesel ayarın parasal değeri,tarih formatı,ayraç ve kuruş degeri için virgülen sonra kac değer geleceğinin listelenişi gösterilmektedir
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
textBox1.Text = (UsersCulture.Name + "CurrencySymbol : "
+ UsersCulture.NumberFormat.CurrencySymbol);
textBox2.Text = ("NumberDecimalSymbol : "
+ UsersCulture.NumberFormat.CurrencyDecimalSeparator );
textBox3.Text ="DateFormat :" + UsersCulture.DateTimeFormat.ShortDatePattern.ToString();
textBox4.Text = "CurrencyDecimalDigits :" + UsersCulture.NumberFormat.CurrencyDecimalDigits.ToString() ;
Aşağıda Uygulamada kullanılan, geçerli olan bir bölgesel ayarı Spanish/Venezuela Bölgesel ayarına degiştirmek için.. gerekli olan code bloğu gösterilmektedir..
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
MessageBox.Show("The current culture of this application is : "
+ UsersCulture.Name);
//
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-VE");
MessageBox.Show("The current culture of this application is : "
+ Thread.CurrentThread.CurrentCulture);
İsletim sisteminizde gecerli olan Bölgesel ayarları gözlemleyip, degiştirebilmenizin bir diğer yolu aşagıda gösterilmiştir..
Start/Settings/ControlPanel/Regional and Language Options
CultureInfo class ında sınıfının LCID (Local ID)ve Name olarak iki özellige bulunmaktadır.
private void button1_Click(object sender, EventArgs e)
{
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture;
MessageBox.Show(UsersCulture.LCID.ToString());
MessageBox.Show(UsersCulture.Name);
}
Yukarıdaki örnekte geriye dönen her iki değerde aynı Bölgesel Ayar verilerine erişmemizi şağlayacaktır..
RegionInfo class’ı, CultureInfo class ‘ının nazaran Bir ülke yada bölge hakkında daha specific ,bilgileri barındırır.
RegionInfo class’ının kullanımı aşagıdaki örnekte gösterilmiştir..
private void button1_Click(object sender, EventArgs e)
{
CultureInfo UsersCulture = Thread.CurrentThread.CurrentCulture ;
RegionInfo DemoRegion = new RegionInfo(UsersCulture.LCID );
//RegionInfo DemoRegion = new RegionInfo("tr-TR");
textBox1.Text = ("English Name: " + DemoRegion.EnglishName);
textBox2.Text = ("Display Name: " + DemoRegion.DisplayName);
textBox3.Text = ("Currency Symbol: " + DemoRegion.CurrencySymbol);
textBox4.Text = DemoRegion.CurrencyNativeName.ToString();
textBox5.Text = DemoRegion.ISOCurrencySymbol.ToString();
textBox13.Text = DemoRegion.NativeName.ToString();
}
Su ana kadar yapılan uygulamalarda var olan Bölgesel ayarları kullandık; Framework 2.0 la gelen UserCustom Cultures ile bunların dısında kendi kişisel bölgesel ayarlarımızı oluşturabiliriz..Kendimize özgü bir takvim,tarih formatı.... ve hatta bu Kişisel Bölgesel Ayarları diğer uygulamalarımızdada kullanılabilir bir hala getirebiliriz.
Kaydol:
Kayıtlar (Atom)