ASP

ASP.NET 2.0 ve Visual Studio 2005 ile Localization

ASP.NET 2.0 ve Visual Studio 2005 ile Localization

ASP.NET 2.0 ve Visual Studio 2005 ile Localization

İnternete gezinirken dikkat ettiğimiz bir husus gezdiğimiz sitenin bizim dilimizde olup olmadığı. Bu sorun bir yana dursun biz sitemizde çoklu dil kullanmak istediğimizde ne yapmalıyız işte bu soru kafalarımızı karıştırırken Framework 2.0 ın Localization desteği sayesinde bu işlemi ne kadar kolay yapabileceğimizi fark edeceğiz. İsterseniz fazla uzatmadan başlayalım. 

Öncelikle yeni bir Web Site açalım ve bu site üzerinde bir örnekle anlatmaya başlayalım. 
Whidbey de File>New>Web Site yolunu izleyelim ve "Localization" adında bir proje yaratalım. 

 Sayfanın sol altı kısmındaki Design(dizayn) butonuna basarak dizayn kısmına geçiyoruz ve sayfamızı tasarlamaya başlıyoruz aklıma benim anket sayfası tasarlamak geldi fakat siz istediğiniz şeyi yapabilirsiniz. 

 Evet basitçe bir sayfa tasarladıktan sonra şimdi lokalize etmeye başlayabiliriz. Sayfamıza tıkladıktan sonra Tools> Generate Local Resource ye tıklıyoruz. 

 Bu işlem sayesinde projemize App_LocalResources klasörü eklenmiş oluyor. Solution Explorer sayesinde görebiliriz. ( eğer yoksa Ctrl+W tuş kombinasyonu sayesinde ulaşabilirsiniz ) 

 Eğer bir .resx dosyası yada başka bir deyişle başka dil dosyaları eklemek istersek bu klasörün altına ekleyeceğiz.
Default.aspx.resx : bu dosyaya çift tıklarsanız bizim projemizdeki PageTitle, ButtonText gibi String değerlerin otomatik eklendiğini göreceksiniz. Bu dosyayı yeniden adlandıralım "Default.aspx.resx" 

 Şimdi sayfamızı İngilizce hale çevirmek için neler yapabileceğimize bakalım. Öncelikle Solution Explorer a geri dönelim ve Default.aspx.resx i kopyalayalım ve App_Local… klasörüne yapıştıralım ve yeniden adlandıralım “Default.aspx.en.resx”. Farklı bir yol izlemek gerekirse App_Local… klasörüne sağ tıklayalım ve Add New Item diyerek yeni dosya ekleme ye gelelim ve Default.aspx.en.resx diye yeni bir Resource File(Kaynak dosyası) oluşturalım. 


Bunu yaptıktan sonra Default.aspx.resx deki tabloları kopyalayıp Default.aspx.en.resx e yapıştırırsak İngilizce dosyamız neredeyse hazır olmuş oluyor sadece oradaki yazılarımızı İngilizceye adapte etmemiz gerekecek. 
Not: eğer İngilizce değil de farklı bir dilde yapmak isterseniz Default.aspx.[kodu].resx şeklinde yapabilirsiniz. 
Dil kodlamalarını buradan bakarak görebilirsiniz. 

Örnek: Default.aspx.de-DE.resx (Almanya Almancası), Default.aspx.ar-EG.resx (Mısır Arapçası ), Default.aspx.de-CH.resx ( İsviçre Almancası ), Default.aspx.tr-TR.resx ( Türkiye Türkçesi)(fakat biz default tr kullandığımızdan bunu yapmamız gerekmez.) 
Sistem otomatikman bu dosyaları bulup sizin verilerinizi çekecektir. 

Bu kadarını yaptık şimdi Default.aspx dosyasını açalım ve sol alt köşeden Source ye tıklayarak kod kısmına geçelim ne yaptık bir bakalım burada hangi component in Resource dan çekileceğini ayarlayan bir kod ekleniyor. 
 

<asp:Label ID="Label1" runat="server" Font-Bold="True" 
meta:resourcekey="Label1Resource1" 
Text="En kullanışlı bilgisayar dili ?">
</asp:Label>

Projemizde gerekli işlemleri yaptıktan sonra nasıl dil seçtireceğiz onun için InitializeCulture(); fonksiyonunu kullanacağız. Solution Explorer’a sağ tıklayıp View Code diyerek kod ekranına geçelim 
 

protected override void InitializeCulture()
{
      System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US");

      System.Threading.Thread.CurrentThread.CurrentCulture = ci;

      System.Threading.Thread.CurrentThread.CurrentUICulture = ci;

      base.InitializeCulture();
}

Diyerek istediğiniz dili ekletebilirsiniz “en-US” kısmı değişecek. Fakat biz bunu kullanmayacağız ben ToolBox dan bir DropDownList(Açılır Liste) ekleyeceğiz ve onu ekledikten sonra Enable AutoPostBack i seçelim ve boş bir yere tıklayalım bu sayede listeden bir şey seçtiğimizde otomatik fonksiyonu çalıştıracak. 

 Bunu yaptıkdan sonra DropDownList1 de Edit Items diyerek yeni liste elemanları ekleyelim 

Burada Text e dilin ismini yazdık Value yani değer kısmına da tr-TR Türkçe için İngilizce için en-US (en-UK İngiliz İngilizcesi için) Fransızca için fr-FR Arapça için ar-EG ekledik. Bu dilleri ekledik ama bunlar için Resource neden oluşturmadık diye soracaksanız buna ilerde değineceğiz. Sonra OK diyerek diyalog penceresini kapatalım. Ve kod ekranına geçelim fonkisyonumuzu şöyle değiştirelim. 
 

protected override void InitializeCulture()
{
      string Kultur = Request.Form["DropDownList1"];
      if (string.IsNullOrEmpty(Kultur)) Kultur = "Auto";
      //Bunu kullanym
      this.UICulture = Kultur;
      this.Culture = Kultur;

      //Yada ?u kodu kullanabilirsiniz
      //if (Kultur != "Auto")
      //{
      //    System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(Kultur);
      //    System.Threading.Thread.CurrentThread.CurrentCulture = ci;
      //    System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
      //}
      base.InitializeCulture();
}

Ekledikten sonra DropDownList1 e çift tıklayarak SelectedIndexChanged fonksiyonun içine girelim ve InitializeCulture(); ekleyelim 

 Evet sitemiz de Default.aspx e geçip son ayarları yapacağız dizayn kısmına geçelim ve tüm radio butonları seçip Events kısmına geçelim ve Checked_Changed fonksiyonunu Checked_Changed’e sağ tıklayarak sıfırlayalım(Aşağıdaki resim daha açıklayıcıdır.) Ctrl+F5 kuş kombinasyonunu izleyelim ve çalıştıralım. 


 Şekilde de görüldüğü gibi projemiz çalıştığında her şey normal gibi görülebilir ama listeden elemanları seçince sitemizin dili hemen değişmiş bulunacaktır. Şimdi olayı biraz daha fantastik hale getirelim ve projemize derleme anında değilken bir Calendar(Takvim) sürükleyip bırakalım ve çalıştıralım. Listeden İngilizce yi seçince İngilizce oluyor tamam ama takvim için bir düzenleme eklemedik burası otomatikman oluyor peki diğer dillerde ne olacak resimde de görüldüğü gibi tüm dillerde aynı etkiyi yapıyor Calendar componenti için otomatik olarak Framework 2.0 da dil özellikleri tanımlanmış durumda. 

 Bir de Türkçe sayfada butonumuz kırmızı gözüksün İngilizce sayfada mavi gözüksün isteyebiliriz bununla ilgili özellikleri de nasıl ele alabileceğimize değinmek istiyorum. 

Öncelikle projemizin Solution Explorer’ını açalım ve http://localhost/Localization yazan yere sağ tıklayalıım ve Add Folder seçeneğinden projemize bir App_GlobalResources klasörü ekleyelim bu klasör, altına eklenecek olan Resource yani kaynak dosyalarının global değişkenler içeriyor olduğunu ifade ediyor. 

 App_GlobalResources klasörüne sağ tıklayarak Add New Item diyelim ve Resource.resx adında bir Resource File oluşturalım. Bu kaynak dosyasının içine Name(ismi) i Renk olan ve Value(değer)’si Red olan bir değer atayalım Ctrl+S ile kaydedip Solution Explorer a geri dönelim ve Resource.resx dosyasını kopyalayayıp App_GlobalResources klasörüne yapıştıralım ve ismini Resource.en.resx yapalım. Çift tıklayarak açalım ve içindeki Red değerini Blue olarak atayalım ve kaydedelim. 

 Buradan devam etmek gerekirse pek fazla bir değişiklik yapmayacağız ama şimdi Default.aspx sayfasının dizayn görünümüne geçelim ve oradan bir buton sürükleyelim ve buton un Properties (özellikler) penceresine girelim oradan Expressions u bulalım ve resimdeki gibi özelliklerine girelim. 

Buradan BackColor yerine istediğimiz bir değişkeni seçebiliriz tabiî ki buton’a bağlı olan özelliklerden. Seçtikten sonra Expression Type (Yükleme Tipi) başlığının altından Resources i seçelim ve alttan ClassKey kısmına Resource.aspx deki Resource ana başlığını ekleyelim eğer buraya istediğiniz bir adı vermişseniz bu adı da görecektir. ResourceKey kısmına iste belirttiğimiz kaynak dosya içerisindeki Name i yazmamız gerekecek (tabiî ki Renk başlığı). Ok diyerek çıkalım o ekrandan sonra da Source diyerek kaynak görünüme bir bakalım burada buton a şöyle bir tag eklenmiş oluyor : 
 

<asp:Button ID="Button1" runat="server" BackColor="<%$ Resources:Resource, Renk %>" Text="Ekle" /></div>

Eğer istersek buton u ekledikten sonra Expressions kısmına gelmeden html kod görünümüne girip şu kodu eklersek BackColor="<%$ Resources:Kaynak kod başlığı, Değerin ismi %>" buton için otomatik çekilecektir burada BackColor yerine istediğimiz bir değeri de ele alabilirdik. Gerekli değişiklikleri yaptıktan sonra sitemizi Ctrl+F5 ile çalıştıralım eğer F5 e basarsanız size Web.Config dosyasını ekleyip eklemeyeceğinizi soracaktır biz hatalara daha hakim olmak için şimdilik eklememeyi tercih ediyoruz ama eklerseniz de hiçbir sakıncası olmaz. 

 Resim de de görüleceği üzere İngilizceyi seçtiğimizde düğmemiz mavi Türkçe de ise kırmızı. 

Biraz daha işi biraz daha eğlenceli hale getirelim ve bir label atalım ismi Label2 olan ve hiçbir şey yapmadan sayfanın boş bir kısmına çift tıklayalım ve otomatikman Page_Load fonksiyonuna gelelim burada double cinsten bir sayı tanımlayalım ve aşağıdaki kodu yazalım. 
 

double sa = 2342232.232;
Label2.Text = String.Format("{0:c}", sa);

Bu kodu yazdıktan sonra programımızı çalıştıralım dikkat ettiniz mi girilen sayı TL olarak dizildi. Listemizde olan tüm dillere göre yeniden düzenlenip ekrana basılıyor. 

 İşte işin basitlik kısmı biraz zorlandıktan sonra ortaya çıkıyor. Tabiî ki eliniz alıştıkça daha hızlı ve daha kolay olacaktır. İşinize yarayacak bir konuya daha değinmiş olduk umarım hoşunuza gitmiştir üzerinde biraz daha çalışında fark ediceksiniz ki aslında daha basit bir işlem. Örnek kodlar ekte gönderilmiştir. 

Not: Bu makaleyi yazarken bana yardımcı olan arkadaşlarıma teşekkürü borç bilirim. İyi çalışmalar. 

HENÜZ YORUM YAPILMAMIŞ

YORUM GÖNDER