Uygulamalarımızda çoklu dil desteği yapmak için global ve local resource dosyalarından faydalarınız.
Genelde uygulamalarda çoklu dil desteği yapmak için bir dropdowndanda dil değiştiğinde uygulamadaki buton,label vs alanların text kısımlarıda değişeceği bir yapı kurulur.
Aşağıdaki gibi örnek bir form oluşturalım.
Daha sonra local resource dosyasını oluşturmak için
Toolsdan — >Generate Local Resource seçeneğine basalım bu sayede otomatik olarak sayfamıza ait resource dosyası oluşacaktır.Bu şekilde generate ettiğimizde otomatik olarak controllere meta:resourcekey eklenerek localizasyon kullanımına hazır hale gelecektir
Bunun yerine asp.net folderlarından App_LocalResources dosyasını ekleyerek içine add new item diyip resource dosyasını manuel de oluşturabiliriz.
Biz default olarak Türkçe kullanacağız ancak İngilizce desteğide istiyoruz bunun için generate dediğimizde oluşan local resource file kopyasını alarak default.aspx.en-Us.resx şeklinde ismini değiştiriyoruz.en-Us yazan yer her dil için farklı bir kod olacaktır ,İngilizce için bu şekildedir.Daha sonra kontrollerimizin text alanlarını bu dosyada değiştiriyoruz
Bu işlemi yaptıktan sonra istediğimiz dropdown listen seçtiğimiz dile göre sayfanın İngilizce veya Türkçe olması bunun için ise sayfamıza aşağıdaki gibi kodlarımızı eklememiz lazım.
Buradaki kod bloğu msndede mevcuttur.İngilizce olması için ddlDilin ingilizce seçeneğinin valuesu en-Us şeklindedir.
protected override void InitializeCulture()
{
if (Request.Form[“ddlDil”] != null)
{
String selectedLanguage = Request.Form[“ddlDil”];
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
base.InitializeCulture();
}
}
Aşağıdaki resimlerdede görüldüğü gibi web sayfasının title özelliğine kadar bile bu yöntemle değiştirebiliyoruz.
Global Resources ise local resource benzemekle beraber aralarındaki fark local resources sayfa bazında kullanılırken global resources birden fazla sayfa için kullanabilirsiniz.Örnek sadece ad,tip,yaratılma zamanı gibi aynı alanları içeren ama farklı formlara sahip yapılarda tek bir global resource dosyası tanımlamak işinize yarayabilir
Bunun içinse projemize asp.net folderlarından App_GlobalResources dosyasını ekliyoruz ve bu dosyanın içine resource dosyamızı oluşturuyoruz.
Ve Butonumuzun değerinin local resource dosyası değilde global dosyadan okunmasını istiyoruz bunun içinse Texti global dosyadaki değerden okuyacak şekilde ayarlıyoruz
<asp:Button ID=”btnTopla” runat=”server” Text=”<%$Resources:globalResource,ToplaButton %>”
/>
Not:aşağıdaki kod bloğu local resourceden okunacak şekilde meta:resourcekey attribute içerir.Eğer localden değil globalden okuyacak bu attribute olmamalıdır.
<asp:Button ID=”btnTopla” runat=”server” Text=”topla”
meta:resourcekey=”btnToplaResource1″ />
Tabi yine globalresource kullanarak ingilizce yapmak istiyorsak
globalResource.en-Us.resx şeklinde aynı dosyamızın ingilizce değerlerini içerecek en-Us uzantılı resource dosyasını yaratmamız gerekiyor
protected override void InitializeCulture() yine bu metod içindeki kodların olması gerekiyor.
Resimdede görüldüğü üzere aynı sayfada hem global resourceden hem local resourcedan değerler okutmak mümkündür
Not:Local resource otomatik generate ettiğimizde sayfamızın özelliklerinede aşağıdaki gibi eklemeler gelmektedir
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” culture=”auto” meta:resourcekey=”PageResource1″ uiculture=”auto” %>
Merhaba, Yaziniz cok guzel fakat eksik gibi. protected override void InitializeCulture() metodunu hangi sayfaya eklemeliyiz? ve ddlDil bunu nerde olusturduk? Umarim cevap alabilirm. Iyi calismalar..
merhabalar InitializeCulture() formun page load gibi bir eventi,ddldil de aynı sayfada oluşturulmuş durumda