Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Ali Hıdımoğlu
Ali Hıdımoğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
7 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: burada diyerek dizayn explorer ingilizce istediginiz kaynak kismina oluyor otomatik projemize resource sayesinde solution tiklayarak ASP.NET Ali Hıdımoğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : ASP.NET
Yayınlanma Tarihi : 11.4.2006
Okunma Sayısı : 44133
Yorum Sayısı : 12     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 20.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 20.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 20.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 20.4.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET 2.0 ve Visual Studio 2005 ile Localization
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
İ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.

Kaynak kodu indirmek için yıklayın.

Ali HIDIMOĞLU

[email protected]

Kaynaklar :

MSDN Dökümanları

Makale:
ASP.NET 2.0 ve Visual Studio 2005 ile Localization ASP.NET Ali Hıdımoğlu
  • Yazılan Yorumlar
  • Yorum Yaz
KAS
3
2010
Hocam simdi oldu ugrasdım ugrastım tam anlamıyla yaptım sonunda.gerçekten cok tskler makaleniz baya yardımcı oldu bana
KAS
3
2010
Hocam session atamasını nasıl yapabilirim bir türlü çıkamadım da bu işin içinden yardımcı olabilir misiniz?
KAS
3
2010
Mantığı düzgün kuruyorsun, fakat yine de Request.Form'dan gelen verilerin değişken olma ihtimalleri var. Onun yerine basitçe Session kullanabilirsin, daha kesin sonuç almanı sağlar...
KAS
2
2010
peki hocam normalde auto olarak geliyor ya bunu tr veya en yapsam ve diger sayfalarda direk request.form dan gelen veriyi koydugum zaman otomatik olarak benim en basta seçtiğim neyse o dil çıkar değil mi?yoksa ben mi mantıgı yanlıs kuruyorum
KAS
2
2010
Merhaba Mehmet, Başka sayfaların da etkilenmeleri için onlar da kültür parametresi belirtilmelidir (örnk: en-EN kültürü). Bunun için en kolay yol, öncelikle kişinin seçtiği parametreyi bir yere kaydet (veritabanı, session, cookie, querystring herhangi biri işini görür), sonrasında da diğer sayfa da kültür parametresi çağrılırken oradan pametreyi alarak çağır. İşini görecektir...
KAS
2
2010
Hocam makaleniz tam aradıgım seydi ve işime yaradı fakat bir sorunum var.mesela ingilizce yi sectim tamam calıstı.fakat baska bir sayfaya gidince ingilizce olarak gitmiyor veya aynı sayfanın linkine tıklayınca yine aynı sorun oluyor sayfa türkçe oluyor :)
EYL
27
2010
makalenizi okudum. güzel bir makale. şunu sormak istiyorum, sitemizdeki makale kısmını düşünelim .veritabanından çektiğimiz. tüm makaleyi ayrıca ingilizce mi yazacağız. yada o veritabanına türkçe yazdığımız makale otomotik ilgilizceye yada arapçaya dönüşecekmi, dönüşecekse nasıl ?
ŞUB
1
2010
Bunun için tavsiye edebileceğim en güzel yöntem, veritabanında kayıtları hem ing. hem de türkçe tutmak ve o an kişinin seçtiği dile göre getirmektir. Başka bir yöntem de dictionary mantığı kullanmak...
ŞUB
1
2010
ufak bi sorum olacak. Mesela sitemde dinamik kategoriler var. Yeni eklenen kategorilere nasıl dil desteği vereceğim?
NİS
27
2006
Datagridin headerını multilang yapmak için onitemcreate gibi bir eventinde GetString(SOMEHEADERKEY) gibi bir metod kullanmıştık. Kısaca manuel olarak. Ama bu işi basitleştirmeleri (nasıl yapılacağını bulamasamda) iyi bir şey. Ama datagrid le inline editing yapmayacaksan neden ihtiyacın olsun ki..Repeater veya xml-xslt kullanmak çok daha iyi fikir bence.. Tamam, tamam basitlik ve projeyi hızlı yapman gerektiğini söyleyeceksin..Kolay gelsin.
NİS
26
2006
Yöntemi denedim datagrid nesneinde grid deki kolon başlıklarını düzenleye biliyosun misal Ad adı verilen bir sütununda onun ismini localization ile çağırabiliyorsun. Bunun için localization yapmadan önce gridi tamamlaman gerek ondan sonra Generate Localization ile onun dosyalarını .resx dosyasından yapabilirsin.
NİS
23
2006
bu yöntemi bir süre kullandım ama sonunda kaldıdım çünkü griddeki kolonları nasıl turkçe yapacağımı bulamadım böle bir deneme yaptınızmı
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor