![]() |
|
|||||||
| Üye Ol | SSS | Sxe indir | Sosyal Gruplar | Takvim | Resim Galerisi | Etiketler | Bütün Forumları okunmuş kabul et |
Web Dizayn Scriptler bölümünde ASP.NET 2.0'da Çoklu Dil Desteği (Localization) konusu , Çoğu web sitesi, ziyaretçiye siteye girdiği zaman siteyi hangi dil ile kullanmak istediğini sormaktadır. Hatta bazı web siteleri otomatik olarak ziyaretçinin kullandığı dili almaktadır. Şeçilen veya otomatik olarak alınan bu dile göre web sayfasında o dilde yazılmış yazılar yazılmaktadır ve ...
![]() |
|
|
LinkBack | Konu Seçenekleri |
|
|
#1 (permalink) |
|
Onursal Üye
![]() Giriş: 02-08-2007
Yaş: 27
Mesajlar: 10.389
Rep Puanı: 7866
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() E-Güven: (7/100)
|
ASP.NET 2.0'da Çoklu Dil Desteği (Localization)
Çoğu web sitesi, ziyaretçiye siteye girdiği zaman siteyi hangi dil ile kullanmak istediğini sormaktadır. Hatta bazı web siteleri otomatik olarak ziyaretçinin kullandığı dili almaktadır. Şeçilen veya otomatik olarak alınan bu dile göre web sayfasında o dilde yazılmış yazılar yazılmaktadır ve ayrıca tarih, para birimi, ondalık yazımı gibi dilden dile değişebilen nesneler şeçilen dile göre yazılmaktadır. Genellikle bu tip çoklu dil desteği tüm web sitesini kopyalayıp diğer istenilen dilde yazmak süretiyle yapılıyordu ve genellikle ana sayfada dil şeçtiğimizde bu alt sitelerden birisine yönlendiriyorduk. Bunun dezavantajı, web uygulamasının bakımını oldukça zorlaşmaktadır. Bir güncelleme yapıldığında tüm alt web sitelerinde aynı güncelleme yapılması gerekmektedir. ASP.NET 2.0'da sitede bulunan statik verileri, tarih, para gibi değerleri ,uygulamayı kopyalamaya ihtiyaç olmadan istenilen dile göre ziyaretçiye sunabiliyoruz. Bu işlem ASP.NET'te bulunan Culture (Kültür) değişkenleri ile yapılıyor. Bir ASP.NET sayfasında 2 adet kullanıcı kültürü değişkeni vardır. Bunlar
UICulture değerine göre sayfada bulunan yazı ve resimler istenilen dillere çevirmiş halde ziyaretçiye sunulur. Diğer bir ifadeyle Resource (Kaynak) dosyalarından (sayfada bulunan resim ve yazıların istediğimiz dillerde karşılığını yazdığımız dosyalar) yazının veya resmin UICulture ile belirlenen dildeki değeri alınıp kullanıcıya sunulur. Resource dosyalarının yapımı ve bunların içindeki verilerin nasıl kullanıldığı detaylı olarak ilerde bahsedilecektir. Culture değerine göre ise sayfada bulunan tarih, para birimi gibi dilden dile değişen değerler yazılmaktadır. Örnek olarak sayfanın Culture değeri "tr" olduğunda gün adları Pazartesi , Salı gibi değerler "en" olduğunda "Monday, Tuesday" gibi değerler almaktadır. UICulture ve Culture değerlerine IETF (Internet Engineering Task Force) tarafından belirlenmiş standart dil kodları yazabiliriz. Örnek bazı dil kodları bunlardır;
İPUCU Kültür'ler sadece dil kısaltması ile ifade edilebilinir. Mesela Türkçe kültürü için yalnızca tr yazılabilinir. Bu tip kültür kodlamasına neutral culture deniyor. Hem dil, hemde alan kodu bulunan kültür kodlarına specific culture deniyor. Eğer hem dil, hem alan adı boş ise bu kültür koduna invariant culture denir ve kültür değeri İngilizce olarak alınır. Yazılabilecek tüm değerler msdn'de CultureInfo sınıfının tanıtımında yazmaktadır. Ordan tüm kültür değerlerine bakılabilinir. (ASP.NET sayfaları sadece specific culture değerlerini kabul etmektedir. Diğer değerler girildiğinde hata vermektedir) DİKKAT UICulture, Culture ve Resource özellikleri ile yalnızca statik verileri birden çok dilde sunabilirsiniz. Eğer dinamik veriler için çoklu dil desteği yapmak istiyorsanız (mesela 3 dilde haber sitesi yapmak gibi) arka planda bu işler için kod yazmanız gerekmektedir ayrıca veritabanı tasarımınızı çoklu dili destekleyecek biçimde geliştirmelisiniz. Hatta bazen web uygulamasını kopyalayıp her dil için uygulamayı güncellemek bazen daha kolay olabilmektedir. Kültür Değerini Sayfada Belirtme. Sayfanın kültür değerini page directive kısmında (sayfanın başındaki <% Page %> arasındaki kısım) Culture ve UICulture değerlerini yazarak belirtiyoruz. Aşağıdaki örnekte sayfadaki tarih ve para değerlerindeki değişimleri görmek için sadece Culture değerini belirtik. Resource dosyaları kullandığımızda UICulture değerinide yazmamız gerekirdi fakat bu örnekte kullanmadığımız için UICulture değerini belirtmedik. 1<%@ Page Language="C#" Culture="de-DE" %> 2 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 4<html xmlns="[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 5<head runat="server"> 6</head> 7<script runat="server"> 8 /* 9 * bu kodu arka planda .cs uzantılı dosyada da yazabiliriz. 10 * Kolaylık açısından aspx sayfasında yazıyoruz. 11 */ 12 public void Page_Load() 13 { 14 /* 15 * ToString("D") objeyi (Date objesi) tarih olarak string'e çevireceğini belirtiyoruz. 16 */ 17 Tarih.Text = DateTime.Now.ToString("D"); 18 /* 19 * 512.33D ile sayının double olduğunu belirtiyoruz. 20 * ToString("c") ile para olarak double'ı string'e çevireceğini belirtiyoruz. 21 */ 22 Para.Text = (100.00123D).ToString("c"); 23 } 24</script> 25<body> 26 <form id="form1" runat="server"> 27 <div> 28 Tarih: 29 <asp:Label runat="server" id="Tarih"></asp:Label> 30 <br /> 31 Para: 32 <asp:Label runat="server" id="Para"></asp:Label> 33 <br /> 34 <br /> 35 <asp:Calendar runat="server"></asp:Calendar> 36 </div> 37 </form> 38</body> 39</html> Kod 1: Default.aspx dosyası ![]() Şekil 1: Culture=de-DE yapıldığında Default.aspx sayfası ![]() Şekil 2: Culture=en-US yapıldığında Default.aspx sayfası ![]() Şekil 3: Culture=tr-TR yapıldığında Default.aspx sayfası Bazı durumlarda sayfadaki Culture değerini dinamik olarak değiştirmemiz gerekebilir. Mesela ziyaretçilerin dillerini seçmesi için yapılmış bir dil seçme ekranında Culture değerinin dinamik olarak değiştirilmesi lazımdır. Culture değerini sayfa oluşum aşamasının ilk başlarında çalışan metodlar içerisinde değiştirmek gerekmektedir. Bunun için en uygun metodlardan bazıları InitializeCulture() metodu veya onInit() metodlarıdır. InitializeCulture metodu Culture'ları belirleyen metod olduğu için standartlara uymak açısından aşağıdaki örnekte yaptığımız gibi InitializeCulture() metodunda Culture'ı değiştirmek daha uygun olacaktır. 1<%@ Page Language="C#" %> 2 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 4<html xmlns="[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 5<head runat="server"> 6</head> 7 8<script runat="server"> 9 /* 10 * bu kodları arka planda .cs uzantılı dosyada da yazabiliriz. 11 * Kolaylık açısından aspx sayfasında yazıyoruz. 12 */ 13 public void Page_Load() 14 { 15 /* 16 * ToString("D") objeyi (Date objesi) tarih olarak string'e çevireceğini belirtiyoruz. 17 */ 18 Tarih.Text = DateTime.Now.ToString("D"); 19 /* 20 * 512.33D ile sayının double olduğunu belirtiyoruz. 21 * ToString("c") ile para olarak double'ı string'e çevireceğini belirtiyoruz. 22 */ 23 Para.Text = (100.00123D).ToString("c"); 24 } 25 /* 26 * Sayfa oluşma aşamasında Culture değerleri atanma aşamasında çalışan InitializeCulture 27 * metodu tekrar yazdık(overwrite yaptık). Bu metod Page_Load metodundan önce çalıştığı için 28 * Page Load metodunda yazılacak değerler burda belirlenen kültür değerlerine göre yazılacaktır. 29 */ 30 protected override void InitializeCulture() 31 { 32 if (Request.QueryString["culture"] != null) 33 this.Culture = Request.QueryString["culture"]; 34 else 35 this.Culture = "tr-TR"; 36 } 37</script> 38 39<body> 40 <form id="form1" runat="server"> 41 <div> 42 Tarih: 43 <asp:Label runat="server" ID="Tarih"></asp:Label> 44 <br /> 45 Para: 46 <asp:Label runat="server" ID="Para"></asp:Label> 47 <br /> 48 <br /> 49 <asp:Calendar runat="server"></asp:Calendar> 50 </div> 51 </form> 52</body> 53</html> Kod 2: Dinamik_Culture.aspx dosyası Bu örnekte gönderilen query string değerine göre sayfa oluşturma aşamasında sayfanın Culture değerini değiştiriyoruz. Bu örnek sonuçları önceki örnek ile aynı olacaktır. İPUCU:ASP.NET membership (üyelik) mekanizması ile tanışmış olanlar üyelik profilinden faydalanarak otomatik olarak sayfanın Culture değerini profil bilgilerinden faydalarak değiştirebilirler. Ayrıca web.config dosyasında anonymous (belirsiz) kullanıcılar için profil belirterek, tüm ziyaretçiler için varsayılan Culture değeri verilebilinir. Otomatik Culture Değeri Atanması: Aslında tüm browserlar web sunuculara istenilen dilleri bildirirler. Bunu sayfayı request (istek) yaptıklarında Accept-Language başlığı altında gönderirler. Browserlar tarafından gönderilen dil değerlerini öğrenmek için Request.UserLanguages dizin nesnesine bakılabilinir. Aşağıdaki örnekte browser tarafından gönderilen dilleri yazdıran bir web sayfası örneği var. 1<%@ Page Language="C#" Culture="tr-TR" %> 2 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 4<html xmlns="[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 5<head runat="server"> 6</head> 7 8<script runat="server"> 9 /* 10 * bu kodu arka planda .cs uzantılı dosyada da yazabiliriz. 11 * Kolaylık açısından aspx sayfasında yazıyoruz. 12 */ 13 public void Page_Load() 14 { 15 foreach (string str in Request.UserLanguages) 16 Diller.Text += str + "<br/>"; 17 } 18</script> 19 20<body> 21 <form id="form1" runat="server"> 22 <div> 23 <u>Diller:</u><br /> 24 <asp:Label runat="server" ID="Diller"></asp:Label> 25 <br /> 26 </div> 27 </form> 28</body> 29</html> Kod 3: ziyaretciDilleri.aspx dosyası ![]() Şekil 4: ziyaretciDilleri.aspx sayfasının benim browserımdan görünüşü Browser tarafından gönderilecek dil ayarları tüm browserlarda değiştirilebilinir. Genelde gönderilen değerler IETF tarafından belirlenen culture standartlarına uyar fakat bazı browserlarda standart olmayan dillerde dönebilir. Şekil 5: Firefox browserında dil ayarlarının yapılması.Aşağıdaki örnekte olduğu gibi page directive kısmında Culture ve UICulture değerlerine auto yazarak browserdan gönderilen dil değerlerininden ilk uyanı sayfanın Culture değişkenine atabiliriz. Eğer auto:tr-TR gibi auto'nın yanında varsayılan bir culture değeri yazdığımızda browser tarafından gönderilen dillerden hiçbirisi uymuyorsa otomatik olarak varsayılan culture değeri atanır (bu örnekte tr-TR değeri). 1<%@ Page Language="C#" Culture="auto:tr-TR" %> 2 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 4<html xmlns="[Bu Linki Görüntüleyebilmeniz İçin Üye Olmanız Gerekiyor. ]"> 5<head runat="server"> 6</head> 7 8<script runat="server"> 9 /* 10 * bu kodları arka planda .cs uzantılı dosyada da yazabiliriz. 11 * Kolaylık açısından aspx sayfasında yazıyoruz. 12 */ 13 public void Page_Load() 14 { 15 /* 16 * ToString("D") objeyi (Date objesi) tarih olarak string'e çevireceğini belirtiyoruz. 17 */ 18 Tarih.Text = DateTime.Now.ToString("D"); 19 /* 20 * 512.33D ile sayının double olduğunu belirtiyoruz. 21 * ToString("c") ile para olarak double'ı string'e çevireceğini belirtiyoruz. 22 */ 23 Para.Text = (100.00123D).ToString("c"); 24 } 25</script> 26 27<body> 28 <form id="form1" runat="server"> 29 <div> 30 Tarih: 31 <asp:Label runat="server" ID="Tarih"></asp:Label> 32 <br /> 33 Para: 34 <asp:Label runat="server" ID="Para"></asp:Label> 35 <br /> 36 <br /> 37 <asp:Calendar runat="server"></asp:Calendar> 38 </div> 39 </form> 40</body> 41</html> Kod 4: Otomatik_Culture.aspx dosyası Böylelikle ASP.NET 2.0'da gelen bu yeni özellik ile ziyaretçilerin karşısına kendi dillerindeki web sayfalarını çıkartabiliriz. Tüm Sayfalar için Culture ayarlaması: Eğer uygulamada yüzlerce sayfa olduğunda tüm sayfalarda tek tek Culture ve UICulture yazması zor olabilir ve bazende bazı sayfalarda yazılması unutulabilinir. Bunun önüne geçmek için web.config dosyası içerisinde uygulamadaki tüm web sayfaları için Culture ve UICulture değişkenleri belirtebiliriz. 1<configuration> 2 <system.web> 3 <globalization uiCulture="auto:tr-TR" culture="auto:tr-TR"/> 4 </system.web> 5</configuration> Kod 5: web.config dosyası Bu tür Culture değeri ataması tek tek sayfalarda Culture değeri atamasından daha kolaydır ve bakımı kolay olduğu için tavsiye edilir. Eğer herhangi bir sayfada Culture veya UICulture değeri belirtilirse o sayfada belirtilen o değer baz alınır. DİKKAT:Bazı örneklerde sadece sayfadaki Culture değerini değiştirdik, UICulture değerine dokunmadık. Bunun sebebi örneklerde UICulture'a değiştirmemize gerek olmamasıdır. Çünkü UICulture bu makalenin devamında detaylı anlatılacağı gibi resource dosyaları bulunduğu zaman işe yarar. Culture değişkeni sayfada tarih, para birimi gibi yöreden yöreye ve dilden dile değişen değerler olduğunda kullanılır. Tüm örneklerde sayfanın Culture özelliği üzerinde yaptığımız işlemleri UICulture üzerinde de yapabiliriz. |
|
|
|