Başlangıç > C# > c# resource dosyası okuma

c# resource dosyası okuma


Merhaba resource
Yazdığımız programlarda birden fazla dil desteği sunacağımız zaman çeşitli yöntemler ile bunu yaparız. Bazen database üzerinde bir tablo içinde bazen de bir Resource dosyasında. Özel bazı durumlarda database üzerinde çoklu dil desteğine ait bilgileri tutsak bile genel olarak bu işlem Resource dosyları ile yapılmaktadır. Şimdi sizlerle birlikte basit bir console uygulaması hazırlayalım ve bu uygulama ile “Hello World” mesajını farklı diller ile yazdıralım. Bunun için projemize yeni bir item olarak Resource file ekliyoruz. Eklediğimiz dosy bizim default culture bilgisine ait olmaktadır. Diğer dillere ait bilgileri tutmak için ise tek tek resource dosyası ekleriz ve bunların isimlerinin sonuna “.” ile o dilin culture bilgisini yazarız. Bizim örneğimizde üç adet dile ait bilgileri kullanacağız. Türkçe, İngilizce ve Fransızca. Siz bunları istediğiniz gibi değiştirip çoğaltabilirsiniz. İlk eklediğimiz Resource file ismini Türkçe dili için kullanacağımızdan adını “Resource.resx” olarak belirtiyoruz, daha sonra ise İngilizce için “Resource.en-US.resx” ve Fransızca içinse “Resource.fr-FR.resx” dosyalarını oluşturuyoruz. Dosyalarımızu oluşturduğumuzda içindeki veriler aşağıdaki gibi olacaktır.

[Resource.resx]

  <data name="HelloWorld" xml:space="preserve">
    <value>Merhaba Dünya</value>
  </data>

[Resource.en-US.resx]

  <data name="HelloWorld" xml:space="preserve">
    <value>Hello World</value>
  </data>

[Resource.fr-FR.resx]

  <data name="HelloWorld" xml:space="preserve">
    <value>Bonjour le monde</value>
  </data>

Şimdi bu resource dosyalarındaki bilgileri okumak için bir class hazırlayalım. Alttaki kod içindeki “ResourceManager” ilk parametresindeki değer Resource dosyasının yerini gösteriri. Bizim projemizde Resource dosyası proje içindeki Resources klasörü altında olduğu için ilk parametre değeri namespace.klasöradi.resource adi şeklindedir.

[Read.cs]

using System.Globalization;
using System.Reflection;
using System.Resources;

namespace ResourcesCs
{
    public static class Read
    {
        public static string FromResource(string key, CultureInfo culture)
        {
            ResourceManager rm = new ResourceManager("ResourcesCs.Resources.Resource", Assembly.GetExecutingAssembly());
            return rm.GetString(key, culture);
        }
    }
}

Okuma yapacağımız class hazır olduğuna göre, program içerisinde her bir dil için culture bilgisine ihtiyacımız olduğundan bu bilgileri tutabileceğimiz bir class hazırlayalım.

[Culture.cs]

namespace ResourcesCs
{
    public static class Culture
    {
        public static string trTR() { return "tr-TR"; }
        public static string enUS() { return "en-US"; }
        public static string frFR() { return "fr-FR"; }
    }
}

Şimdide çalışacak olan programımızı yazalım.

[Program.cs]

using System;
using System.Globalization;

namespace ResourcesCs
{
    class Program
    {
        static void Main(string[] args)
        {
            CultureInfo cultureTR = new CultureInfo(Culture.trTR());
            CultureInfo cultureUS = new CultureInfo(Culture.enUS());
            CultureInfo cultureFR = new CultureInfo(Culture.frFR());

            Console.WriteLine("Read resources from Resource.resx with Culture");
            Console.WriteLine("HelloWorld with " + cultureTR.Name + " : " + Read.FromResource("HelloWorld", cultureTR));
            Console.WriteLine("HelloWorld with " + cultureUS.Name + " : " + Read.FromResource("HelloWorld", cultureUS));
            Console.WriteLine("HelloWorld with " + cultureFR.Name + " : " + Read.FromResource("HelloWorld", cultureFR));

            Console.ReadKey();
        }
    }
}

Artık herşey hazır ve programı çalıştırdığımızda ise çıktı olarak aşağıdaki gibi bir sonuç görürüz.

Read resources from Resource.resx with Culture
HelloWorld with tr-TR : Merhaba Dünya
HelloWorld with en-US : Hello World
HelloWorld with fr-FR : Bonjour le monde

Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: