TeknoTR  

Geri Dön   TeknoTR > Webmasterler için > Web Dizayn Scriptler
Üye Ol SSS Sxe indir Sosyal Gruplar Takvim Resim Galerisi Etiketler Bütün Forumları okunmuş kabul et


ASP.NET 2.0'da Çoklu Dil Desteği (Localization)

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 ...

Cevapla
 
LinkBack Konu Seçenekleri
Eski 10-18-2007, 09:19   #1 (permalink)
Onursal Üye
 
stromper - ait Avatar
 
Giriş: 02-08-2007
Yaş: 27
Mesajlar: 10.389
Rep Puanı: 7866
stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11
Rep Gücü: 156
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
  • Culture
değişkenleridir.
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;
  • tr-TR (Türkçe-Türkiye )
  • en-US (İngilizce-ABD )
  • en-GB (İngilizce-Büyük Britanya )
  • de-DE (Almanca-Almanya)
Dikkat edildiyse bir kültür kodu 2 alandan oluşmaktadır. Birinci alan konuşulan dilin küçük harflerle 2 hecelik kısaltması, ikinci alan büyük harflerle 2 hecelik ülke veya alan kısaltmasıdır (bazen 2 heceden fazlada kullanılabilinir). Genelde dil kısaltmasına göre gün, ay adları gibi değerler yazılır ve ülke veya alan kısaltmasına göre para birimi yazılır veya ondalık gösterimi yapılır. Mesela sayfanın Culture özelliği en-US olduğunda para birimleri otomatik olarak $'a çevrilir, en-GB olduğunda otomatik olarak £'e çevrilir.
İ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.
stromper isimli üyemiz çevrimdışıdır. (Offline)  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Alıntı ile Cevapla
Cevapla

Konu Seçenekleri

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık
Gitmek istediğiniz klasörü seçiniz


Şu an saat 16:09 .
Tarih 09-05-2008


Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
Türkçe Çeviri : ach

eXTReMe Tracker


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192