Makale Özeti

Geliştirdiğimiz uygulamaların yerelleştirmeye uygun altyapıda olması, uygulamanın farklı dil ve kültürleri desteklemesidir. Bu da ara yüzdeki terimlerin belirtilen dil veya kültüre uygun olarak değişmesi anlamına gelir. Olaya uygulama geliştirme mimarisi açısından baktığımızda lokalizasyonu genel olarak bu şekilde açıklayabiliriz. Bu yazımda konuya Sharepoint uygulama geliştirme tarafından bakarak , Sharepoint uygulamalarımızı çoklu dil desteğini sağlayacak şekilde nasıl geliştiririz değinmeye çalışacağım.

Makale

Geliştirdiğimiz uygulamaların yerelleştirmeye uygun altyapıda olması, uygulamanın farklı dil ve kültürleri desteklemesidir. Bu da ara yüzdeki terimlerin belirtilen dil veya kültüre uygun olarak değişmesi anlamına gelir. Olaya uygulama geliştirme mimarisi açısından baktığımızda lokalizasyonu genel olarak bu şekilde açıklayabiliriz.
Bu yazımda konuya Sharepoint uygulama geliştirme tarafından bakarak , Sharepoint uygulamalarımızı çoklu dil desteğini sağlayacak şekilde nasıl geliştiririz değinmeye çalışacağım.

 

Uygulama Geliştirme Ortamının Hazırlanması

 

Öncelikle Sharepoint tarafında geliştirdiğimiz bir uygulamanın, çoklu dil desteğini sağladığını test edebilmemiz için geliştirdiğimiz uygulamada destek vereceğimiz dillerin Language Pack’lerinin kurulumunu Sharepoint farmımıza yapmamız gerekmektedir.

Sharepoint 2010 Foundation ve Sharepoint 2010 Server için ayrı language pack kurulum paketleri bulunmaktadır. Aşağıdaki linklerden kurulum paketlerine erişebilirsiniz.

 

Sharepoint 2010 Language Pack

http://www.microsoft.com/download/en/details.aspx?id=4731

 

Sharepoint 2010 Server Language Pack

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=3411

 

Sharepoint Language Pack kurulumları için daha detaylı buradan erişebilirsiniz.

 

Language Pack kurulumlarını gerçekleştirdikten sonra yeni bir site koleksiyonu yaratmak istediğimizde Select A Language (Dil Seçimi) kısmının geldiğini göreceksiniz. Buradan site koleksiyonumuzun dilini seçerek devam ediyoruz. Sharepoint sitemizin birden fazla dili desteklemesi için site koleksiyonumuzu oluşturduktan sonra – Site koleksiyonunu Türkçe oluşturduğumuzu varsayarak-

 

Site Eylemleri –> Site Ayarları –> Site Yönetimi –> Dil Ayarları kısmından Language Pack kurulumu yaptığımız dil ya da diller ,site için seçilebilir diller olarak gözükecektir.

Mevcut dilleri sitemiz için aktif hale getirdikten sonra Welcome menüsüne sitenin dilini değiştirme menüsü eklenecektir. Görüntüleme Dilini değiştirdiğimizde ara yüzdeki kendi eklediğimiz objelerdeki tanımlamalar hariç tüm terimlerin değiştiğini göreceksiniz.

Uygulama geliştirme altyapısını çoklu dil desteği için oluşturduktan sonra,

Sharepoint tarafında uygulama geliştirirken neler yapmamız gerekiyor buna değinelim..

Sharepoint uygulamalarında klasik Asp.Net uygulamalarında olduğu gibi çoklu dil desteği, uygulamaya eklenen Resource dosyaları ile sağlanır. Arayüz üzerinde kullandığımız tüm string ifadeleri resource dosyasından alırız.

Resource Dosyaları

Resource dosyaları Xml tabanlı .resx uzantılı dosyalardır. İçerisinde Name-Value dizisi şeklinde string ifadeler barındıracağı gibi; Images,Icons,Audio,Files v.s gibi çeşitli tiplerde içerikleri de barındıran dosyalardır.

Sharepoint tarafında sadece string resourcelar ile çalışacağız.

Resource dosyaları da kendi içerisinde 3 tipte görebiliriz.

Bunlar ;

  • Default : Uygulamanın varsayılan dili için kullanılan Resource dosyasıdır. Eğer herhangi bir dil için Resource dosyası oluşturulmadıysa uygulama içerisinde Default Resource dosyası kullanılır.

Ortak dile sahip birçok ülkede bile birçok farklılıklar olabilir. Örneğin Amerika İngilizcesi ile İngiltere İngilizcesi arasında farklılıklar vardır. Bu farklılık dil ayrımına ek olarak kültür (culture) ayrımı ile çeşitlendirilir.

  • Language-neutral : Yukarıda belirttiğim kültür ayrımı olmadan Resource dosyasının belirli bir dilin string bilgilerini içermesidir. Örneğin Fransızca için “fr”.Örn: Resource.fr.resx
  • Language – specific : Ortak dile ait farklılıkları da içeren Resource dosyasıdır. Örneğin en-US Amerikada kullanılan İngilizce’yi ifade etmektedir.Örn: Resource.fr-FR.resx

Resource dosyaları isimlendirme kuralı <original_name>.<culture>.resx şeklindedir.

CustomResource.en-US.resx
CustomResource.tr-TR.resx

Sharepoint uygulamalarının çalışma zamanına ve kullanıldığı nesnelere göre iki tip Resource dosyası vardır.

Bunlar ;

  • Provisioning Resource Dosyaları
  • Application-Runtime Resource Dosyaları

 

1.Provisioning Resource Dosyaları

Sharepoint uygulaması ilk yüklenme aşamasında kullanılan Resource dosyalarıdır.

- Feature,site definition ,list definition gibi elementlerde kullanılırlar..

Bu Resource dosyaları

  • 14\TEMPLATE\FEATURES\<Feature Adı>\Resources\
  • 14\Resources\

dizinleri altında bulunur.

Hangi dizinin altındaki resource dosyasının kullanılacağı resource dosyasının kullanım şekline bağlıdır. Bu cümlemi biraz açmam gerekirse.Eğer feature spesifik bir resource dosyası kullanacak isek o feature’ın kendi folderı altındaki

(“14\TEMPLATE\FEATURES\<Feature Adı>\Resources\”) resource dosyasını kullanılırız.

Eğer tüm solutionda ortak bir resource dosyası kullanılacaksa , ve bu resource dosyasını solution içerisindeki tüm featurelar,site definion,list definition kullanılacaksa ise

(“14\Resource”) altındaki resource dosyası kullanılır.

 

2.Application-Runtime Resource Dosyaları

Uygulamanın çalışma zamanında kullanılan Resource dosyaları olarak tanımlayabiliriz. Application Pages,web partlar ve kontrollere ait string ifadeler application resource dosyalarında yer alır.

Application Resource dosyaları

  • 14\CONFIG\Resources\
  • 14\CONFIG\AdminResources\
  • C:\Inetpub\wwwroot\wss\VirtualDirectories\<port>\App_GlobalResources\

dizinlerinde yer alır..

“14\config\resources” altında yer alan application resource dosyaları uygulama çalışma zamanında ilgili web application’ın App_GlobalResources folderına otomatik olarak kopyalanır..

  • C:\Inetpub\wwwroot\wss\VirtualDirectories\<port>\App_GlobalResources\

Central admin web application’a ait resource dosyaları ise 14\CONFIG\AdminResources\ folderında yer alır ve çalışma zamanında Central Admin’e ait web application’ın iis üzerindeki App_GlobalResources dosyasına kopyalanır…

Sharepoint üzerinde Resource Dosyalarının Kullanımı

Resource dosyaları hakkında bilgi edindikten sonra konuyu bir örnek ile pekiştirmeye çalışacağım.

1. Feature’larda Feature spesifik resource dosyası nasıl kullanılır

Visual Studio 2010 üzerinde bir Sharepoint Projesi başlatıyoruz.

Proje oluşturulduktan sonra Features klasörüne sağ tıklayarak “Add Feature” diyerek yeni bir feature ekliyoruz.

Oluşturduğumuz Feature için bir resource dosyası tanımlayacağız.Feature ‘un üzerine gelerek sağ tıklıyoruz ve “Add Feature Resource” diyerek yeni bir Resource dosyası seçiyoruz.

Gelen ekranda default language anlamına gelen “Invariant Language” i seçiyoruz.

Daha sonra destekleyeceğimiz diller için “Add Feature Resource” işlemini tekrarlıyoruz ve ekleyeceğimiz dilleri açılan popup’ta seçiyoruz. Ben Default dil (İngilizce) ve Türkçe için iki tane feature resource dosyası ekledim.

Resource dosyalarını ekledikten sonra düzenliyoruz..

Bu tanımlamaları yaptıktan sonra Feature1 ‘i desing modda açıyoruz . Title ve Description alanını aşağıdaki formata göre güncelliyoruz.

$Resources:StringID

Uygulamamızı deploy ederek dil değişimi yapıyoruz. Site Özellikleri içinde Feature1 ‘in Title ve Description alanları seçili dile göre değiştiğini göreceksiniz.

Sitenin dili Türkçe seçildiğinde

Sitenin dili İngilizce seçildiğinde Resource dosyasına uygun olarak Feature’un değiştiğini göreceksiniz.

2.Ortak Bir Resource Dosyasını Tüm Uygulama İçin Kullanmak (Tüm Featurelar,aspx ve ascx sayfaları ,site def.,list definition v.s için)

Solution üzerinde ortak bir Resource dosyasında, Tüm arayüzlerin (webpages,webparts) tanımlamalarını ve solution içerisinde kullandığımız feature ,site definition ,list definition gibi nesnelerde kullandığımız tanımlamaları barındıracağız.

Bunun için;

Visual Studio üzerinde, solutiona sağ tıklayarak Add > SharePoint Mapped Folder… ‘I tıklıyoruz.

Açılan ekranda Resource folderını seçiyoruz..

Solution üzerinde map edilmiş Resources folderı oluşturduktan sonra.Resource folderına sağ tıklayarak Add New Item ‘ı seçiyoruz. Açılan ekranda Resource template’ini seçiyoruz ve MyResource.resx adını vererek devam ediyoruz.

Solution ‘a Feature2 adında bir feature ekleyerek .Bu feature’ın Resource dosyasının 14\Resource folderının altına koyduğumuz dosya olmasını sağlayacağız.

Feature2 isimli Feature çift tıklanarak özellikler penceresini açıyoruz. Burada “Default Resource File” olarak belirtilen alana “MyResource “ yazıyoruz..

Feature2 ‘in Title ve Description alanını resource dosyasından alacak şekilde düzenliyoruz.

Uygulamamızı deploy ederek çalıştırdığımızda Feature2 için Title ve Description alanının MyResource dosyasından geldiğini göreceksiniz.

3. Bir visual webpart üzerinde resource dosyasını nasıl kullanırız.

 

Provisioning Resource Örneği :

SPUtility.GetLocalizedString metodu ortak bir resource dosyasında tanımlanmış değerleri çekmek için kullanılır.Metodun kullanım detayını buradan görebilirsiniz..

Projemize bir visual webpart ekliyoruz ve bu webpartın arayüzüne iki Label ve bir Buton yerleştiriyoruz.

Visual webpart ‘ın kod kısmında Label ve Buton’ların Text değerlerini setleyeceğiz.

<table border="0" cellpadding="0" cellspacing="0">
  <tr>
  <td width="160" height="15" align="left" valign="middle">
  <asp:Label ID="ltrUserId" runat="server" Text=""></asp:Label>
  </td>
  <td width="160" height="15" align="left" valign="middle">
  <asp:Label ID="ltrPassword" runat="server" Text=""></asp:Label>
</td>
  <td width="120" height="15" align="left" valign="middle">
  </td>
  </tr>
  <tr>
  <td width="160" height="22" align="left" valign="middle">
  <asp:TextBox ID="txtUserId" runat="server"></asp:TextBox>
  </td>
  <td width="160" height="22" align="left" valign="middle">
  <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
  </td>
<td width="120" height="22" align="left" valign="middle">
  <asp:Button ID="btnLoginSubmit" runat="server" Text="" />
  </td>
</tr>
  </table>

Kod tarafına ;

01 protected void Page_Load(object sender, EventArgs e)
02 {
03
04 var lcid = (uint)CultureInfo.CurrentUICulture.LCID;
05
06 lblUserId.Text = SPUtility.GetLocalizedString("$Resources:UserId", "MyResource", lcid);
07 lblPassword.Text = SPUtility.GetLocalizedString("$Resources:Password", "MyResource", lcid);
08 btnLoginSubmit.Text = SPUtility.GetLocalizedString("$Resources:LoginSubmit", "MyResource", lcid);
09
10 }

var lcid = (uint)CultureInfo.CurrentUICulture.LCID;"http://serkanakkaya.files.wordpress.com/2012/02/20.png">

4.Application Resource ‘ları nasıl kullanırız

Runtime Resources :

Uygulamamazın çalıştığı web app. ‘ın virtual directory’si üzerinde yer alan App_GlobalResource içerisindeki resource tanımlamalarına,

Kod tarafında HttpContext.GetGlobalResourceObject metodu ile arayüz tarafında (aspx/ascx) <%$Resources:Resource File Name, String ID%> tanımlaması ile erişebiliriz.

Resource File Name : Resource dosyamızın culture bilgisi olmadan adı .Örneğin MyResource

String ID : Resource dosyası üzerinden değerini almak istediğimiz string’in adıdır.

Son madde ile ilgili örnek vererek yazımı sonlandıracağım..

Resource dosyasını ilgili WebApp’nin IIS üzerindeki App_GlobalResource folderı altına deploy edebilmek için, solution üzerine sağ tıklayıp Add New Item diyerek bir Empty Element ‘i solution’a ekliyoruz.

Daha sonra bu empty element içine Resource dosyalarımıza ekliyoruz.Solution üzerinde Resource dosyaları seçili ilen properties ekranından Deployment Type’ını AppGlobalResource ‘a çekiyoruz.

Burada şunu da belirtme de fayfa var. Bir başka özellik olan Build Action ‘a Content dersek sadece aspx ve ascx üzerinde yerelleştirme kodu kullanabileceğimizin anlamına geliyor. Build Action’ı Embedded Resource ‘a çekersek hem arayüzde hem de codebehind’da yerelleştirme kodu kullanacağız anlamına geliyor..

Son olarak webpart örneğimizdeki (ascx) label ve buton kontrollerin Text özelliğini aşağıdaki gibi değiştirebiliriz.

Son olarak webpart örneğimizdeki (ascx) label ve buton kontrollerin Text özelliğini aşağıdaki gibi değiştirebiliriz.

011 <table border="0" cellpadding="0" cellspacing="0">
02 <tr>
03 <td width="160" height="15" align="left" valign="middle">
04 <asp:Label ID="ltrUserId" runat="server" Text="<%$Resources:IsbankKimoResource,UserId%>"></asp:Label>
05 </td>
06 <td width="160" height="15" align="left" valign="middle">
07 <asp:Label ID="ltrPassword" runat="server" Text="<%$Resources:IsbankKimoResource,Password%>"></asp:Label>
08 </td>
09 <td width="120" height="15" align="left" valign="middle">
10 &nbsp;
11 </td>
12 </tr>
13 <tr>
14 <td width="160" height="22" align="left" valign="middle">
15 <asp:TextBox ID="txtUserId" runat="server"></asp:TextBox>
16 </td>
17 <td width="160" height="22" align="left" valign="middle">
18 <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
19 </td>
20 <td width="120" height="22" align="left" valign="middle">
21 <asp:Button ID="btnLoginSubmit" runat="server" Text="<%$Resources:IsbankKimoResource,LoginSubmit%>" />
22 </td>
23 </tr>
24 </table>

Kod tarafında da ında da adenin resource dosyasından çekilmesi ya da kullanıcıya döndürülecek bir mesajın yine kod tarafında resource dosyasından çekilmesi gibi örneklerde HttpContext.GetGlobalResourceObject metodunu kullanabiliriz.

Bu yazımda Shaepoint uygulamalarında, Asp.Net uygulamalarında olduğu gibi Resource dosyaları ile Çoklu dil desteğini (Multilingual Application) nasıl sağlarız bunu anlatmaya çalıştım.

Sorularınız ve katkılarınız için bana serkan_akkaya@yahoo.com ‘dan ulaşabilirsiniz.

Uygulamanın kaynak kodunu almak için serkan_akkaya@yahoo.com ‘a mail atabilirsiniz.