ASP.NET Kaynak Kullanımıyla Yerelleştirme ve Çoklu Dil Desteği (Lokalizasyon ve Globalizasyon)
Farklı dilleri destekleyen sitelerin tasarımı için ASP.NET kaynak kullanımı yoluyla bir çözüm sağlamaktadır. Kaynaklar Local (Yerel) ve Global (Küresel) diye 2 başlıkta ele alınmıştır. Aralarındaki fark; lokal kaynakların sadece belirli bir sayfa için tanımlanması globallerin ise sitedeki tüm sayfalar için ortak kullanılabilmesidir. Lokal kaynak dosyaları isimlendirilirken bu nedenden ötürü sayfa ismi.resx biçiminde isimlendirilir. Örneğin "Giris.aspx.en-US.resx" gibi. Kaynak dosyaları gerçekte xml dosyasıdır. Aykut TAŞDELEN
Not : Kaynak kullanımıyla ilgili detaylar "İleri ve Kurumsal Düzey .NET Uygulamaları" isimli kitabımda geniş şekilde ele alınmaktadır.
Yeni ASP.NET sınıfı 4 Temmuz haftasında derneğimizde açılacaktır !
Bir sayfa için kaynak dosyası üretmenin yolu; “Tools menüsünden > Generate Local Resource” seçeneğini kullanmaktır. İçinde lblUser,lblPwd isimli Label'ların ve diğer kontrollerin olduğu Giris.aspx sayfası için Visual Studio şöyle bir kaynak dosyası (Giris.aspx.resx) üretecektir :

Kaynak içerisinde veriler anahtar=değer çifti şeklinde tutulur. VS IDE'si kontrolün Text, Tooltip gibi özelliklerine ilişkin anahtar değerleri lblUserResource1.Text şeklinde isimlendirmiş değerler ise tümüyle geliştiricinin inisiyatifinde tanımlanmıştır.
Bu şekilde bir Türkçe kaynak dosyası tanımlandıktan sonra bundan copy-paste yoluyla İngilizce (Giris.aspx.en-US.resx) hatta Fransızca (Giris.aspx.en-US.resx) kaynak dosyaları türetilebilir. (İsimlendirmeye dikkat ediniz)Şüphesiz bu dosyalarda değerler o dile göre verilerek anlamlı bir lokalizasyon yapılmalıdır.
Lokal kaynak dosyaları App_LocalResources klasörüne globaller ise App_GlobalResources klasörüne yerleştirilir.
VS ‘nun sayfa için ürettiği kod incelenirse Page direktifinde
meta:resourcekey="PageResource1" ve Culture="auto" UICulture="auto"
değerlerini yazdığı görülecektir. Kontroller ise kaynaktan verileri şu şekilde almaktadır :
<asp:Label ID="lblUser" meta:resourcekey="lblUserResource1"
Projeyi test için normal derleme işlemi yapılmalı ve sayfa tarayıcıda açılmalıdır. Tarayıcınızın dil kısmındaki ayarın Türkçe olduğu varsayılırsa sayfadaki yazıları Türkçe olarak görüyor olmalısınız. Ancak tarayıcı ayarlarında (bu örnek için en-US İngilizce ve fr-FR fransızca dillerini de eklerseniz) ve hangi dil sıralamada üste alınıp sayfa refresh edilerek görüntülenirse yazıların o dilde çıkması gerekir.
Öte yandan bu belirlemeler programatik olarak da yapılabilir. Herşeyden önce page direktifinde (Culture="auto" UICulture="auto") belirlemeleri silinip sayfa kodunda InitializeCulture() sanal fonksiyonu edilmelidir. Bu fonksiyon sayfa için kültür bilgisinin tanımlanmasına yarar.
using ci = System.Globalization.CultureInfo;
using thr = System.Threading.Thread;
public partial class Giris : System.Web.UI.Page
{
protected override void InitializeCulture()
{
if (Session["dil"] != null)
//if (! string.IsNullOrEmpty(Request.QueryString["lang"]))
{
//string kod = Request.QueryString["lang"];
string kod = Session["dil"].ToString();
ci inf = new ci(kod);
this.Culture = kod;
this.UICulture = kod;
thr.CurrentThread.CurrentCulture = inf;
thr.CurrentThread.CurrentUICulture = inf;
}
}
}
Burada sayfa Culture ve UICulture özelliklerine atama yapılmıştır. Şüphesiz bu değer Session ya da QueryString gibi bir kaynaktan elde edilebilir. Bu durumda tarayıcıda ayar ne olursa olsun (ilgili diller yine eklenmiş olmalıdır) istenilen dilde yazılar görüntülenebilir.
C ve Sistem Programcıları Derneği Eğitmeni
