Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C#’ta Globalization İle Farklı Diyarlara Açılma

Merhaba,

Bu içeriğimizde biraz farklı bir konu üzerinde duruyor olacağız. Oluşturduğumuz yazılımın, farklı coğrafya ve kültürlere hitap edebilmesi, kültürlenebilmesi için Globalization(globalleşme) ile programımızı zenginleştirmeliyiz. Aslında bu zengin kültür için oluşturulan yazılımın i18n(internationalization – uluslararasılaşma) özelliklerinin kazanılması ve l10n(localization – lokalleşme) ile bu özelliklerin birleştirilmesi hedeflenmesi ve bunun için çalışılması gerekmektedir. Bu mantıkla büyük yazılım firmalarının içerisinde globalization ekipleri kurulmakta; hedeflenen ülkeler, diller, kültürler için uyumluluk çalışmaları yapılmaktadır.

Bizlerde kendi yazılımlarımızı kültürü kuvvetli bir şekilde tasarlayabilir ve inşa edebiliriz. “.NET” çatısı altında geliştirdiğimiz bir uygulamanın birden fazla kültüre hitap edebilmesi için System.Globalization kütüphanesi oluşturulmuştur. Bu kütüphane altındaki CultureInfo sınıfı sayesinde projemizin o anki kültürü hakkında bilgi edinebilir yahut başka kültürlere hitap edecek tarzda bir ayarlama gerçekleştirebiliriz.

Şimdi biz bu içeriğimizde CulterInfo sınıfının ne gibi ihtiyaçlara dönük olduğunu örneklendirmek için pratikte kısa bir tanıtım yapacağız. Ardından basit bir hata durumu üzerinden farklı kültürlerde programın vereceği tepkileri şekillendireceğiz.

Öncelikle örnek bir proje üzerinde o anki mevcut kültüre nasıl erişebileceğimizi görelim.
Console Application

            CultureInfo MevcutKultur = Thread.CurrentThread.CurrentCulture;

Windows Form Application

            CultureInfo MevcutKultur = Application.CurrentCulture;

Yukarıda gördüğünüz gibi iki farklı platformda da kültüre nasıl erişilebilindiğini gösterdim. Bu adımdan sonra bizler içeriğimize “Console Application” çerçevesinde ilerliyor olacağız. Tabi ki de ne gösterdiysek diğer platformlara genellenebilir tarzda olacaktır.

Şimdi mevcut kültürün özelliklerine bakalım.

            CultureInfo MevcutKultur = Thread.CurrentThread.CurrentCulture;
            Console.WriteLine($@"
                                Kültür Kodu : {MevcutKultur.Name}
                                Kültür : {MevcutKultur.DisplayName}
                                İngilizce Adı : {MevcutKultur.EnglishName}
                                Tarih Formatı : {MevcutKultur.DateTimeFormat.DateSeparator}(Tarih) ve {MevcutKultur.DateTimeFormat.TimeSeparator}(Zaman)
                                Numara Ayırıcı : {MevcutKultur.NumberFormat.NumberDecimalSeparator}
                                ");

C#'ta Globalization İle Farklı Diyarlara Açılma
Görüldüğü üzere o an üzerinde çalıştığımız kültür hakkında adından tutun, o kültürün tarih yahut para birimlerinde kullandığı ayraçlara kadar birçok bilgiyi elde edebiliyoruz.

Ayriyetten kültürün özelliklerine aşağıdaki gibi müdahale edebiliyoruz.

            CultureInfo MevcutKultur = Thread.CurrentThread.CurrentCulture;
            MevcutKultur.NumberFormat.CurrencySymbol = "TL";

Eğer ki bu müdahaleden sonra kültürün özelliklerini yazdırırsak aşağıdaki ekran çıktısında olduğu gibi bir sonuçla karşılaşıyoruz.

            CultureInfo MevcutKultur = Thread.CurrentThread.CurrentCulture;
            Console.WriteLine($"Para birimi = {MevcutKultur.NumberFormat.CurrencySymbol}");
            MevcutKultur.NumberFormat.CurrencySymbol = "TL";
            Console.WriteLine($"Para birimi = {MevcutKultur.NumberFormat.CurrencySymbol}");

C#'ta Globalization İle Farklı Diyarlara Açılma

Ya da aşağıda olduğu gibi farklı kültürlerde farklı sayısal ayraçlarda kullanılabilir.

            CultureInfo MevcutKultur = Thread.CurrentThread.CurrentCulture;
            int Para = 100000;
            Console.WriteLine($"Sayı ayracı = {MevcutKultur.NumberFormat.NumberDecimalSeparator}");
            Console.WriteLine(Para.ToString("N2"));
            MevcutKultur.NumberFormat.NumberDecimalSeparator = "-";
            Console.WriteLine($"Sayı ayracı = {MevcutKultur.NumberFormat.NumberDecimalSeparator}");
            Console.WriteLine(Para.ToString("N2"));

C#'ta Globalization İle Farklı Diyarlara Açılma

CultureInfo sınıfını tanımanın ardından sırada programın çalışma zamanında vereceği tepkilerin kültürünü ayarlamaya geldik.

.NET tarafından önceden hazır olarak belli başlı kültürlere özel temel durumların ayarları yapılandırılmıştır. Bu yapılandırmalardan biri hata durumlarında karşımıza çıkmaktadır. Genellikle programlarımızda aldığımız exceptionlar İngilizce bizlere gelmektedir. Lakin bunu Türkçe olarak da elde edebiliriz.

int Sayi = int.Parse("Muiddin");

Bu işlemi baz alırsak eğer aşağıdaki hatayı alacağız.
C#'ta Globalization İle Farklı Diyarlara Açılma
Şimdi gelin uygulamamızın kültürünü Türkçe olarak değiştirelim ve nasıl bir sonuç alıyoruz inceleyelim.

            Thread.CurrentThread.CurrentUICulture = new CultureInfo("tr");
            int Sayi = int.Parse("Muiddin");

C#'ta Globalization İle Farklı Diyarlara Açılma

Gördüğünüz üzere mevcut kültür üzerine yeni bir kültür tanımlamamız bu işlem için yeterlidir. Tanımlanan bu CultureInfo nesnesinin hangi kültüre ait olacağına yapıcı metoduna verdiğimiz name parametresi sayesinde belirleyebiliyoruz.

“tr” name kodu Türkçe’yi temsil etmektedir. “Peki hocam biz hangi name kodunun hangi dili temsil ettiğini nereden anlayacağız?” diye sorarsanız eğer bu adrese göz atmanız yeterli olacaktır.

Şimdi örnek teşkil etmesi açısından buradaki dili Fransızca yapalım.

            Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
            int Sayi = int.Parse("Muiddin");

C#'ta Globalization İle Farklı Diyarlara Açılma

Görüldüğü üzere bu işlem sonucunu İngilizce karşılığıyla aldık. Bunun sebebi, seçilen kültürün o andaki duruma ait bir karşılığının olmamasıdır. Buradan da anlaşılan varsayılan kültür İngilizce’dir.

Evet… Görüldüğü üzere, üzerinde çalıştığımız uygulamanın kültürünü nasıl ayarladığımızı en ince detaylarına kadar irdelemiş vee makalemizinde sonuna gelmiş olduk…

Sonraki yazılarımızda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*