Site-uri care știu mai multe limbi. Globalizare. Cum faci un site ușor de localizat

Acum câteva zile spuneam cum află site-urile ce limbă preferi tu din browser. Și cum setezi limba preferată. Și promiteam să revin cu una mai greu digerabilă: cum faci un site care știe mai multe limbi. Adică un site "globalizat" cu nuanțe locale🙂 Ăsta o să fie un articol luuuung…

Nu mai stăm la povești. Ați activat serverul Web IIS din Vista, ați instalat ediția gratuită Visual Studio 2008 Web Developer… Începem un nou mini-proiect de site Web – Captura 1. Undeva în D:\Joaca vor fi fișierele site-ului. Capturile 2 și 3 vă arată cum declarați o nouă aplicație în IIS așa încât să puteți vedea site-ul pe http://localhost/joaca.
 

Pentru nerăbdători, iote codul mai jos:

http://cid-e8c695f41ad95458.skydrive.live.com/embedrow.aspx/Public/Exemplu|_Site|_Localizabil.zip

Fișiere și directoare

La baza localizării stau fișierele de resurse localizabile. Fișiere RESX. De cele mai multe ori, discutăm de string-uri traduse în diverse limbi. Fișierele RESX stau în două tipuri de foldere speciale ale ASP.NET: App_GlobalResources și App_LocalResources.

Global Resources se referă la resurse accesibile în toate paginile site-ului. Există un singur folder App_GlobalResources pentru o aplicație Web, și acesta va sta în rădăcina aplicației. Resursele se împart în clase, fiecare clasă fiind recunoscută după numele fișierului (Clasa_Resurse.resx). Pentru fiecare clasă, putem avea mai multe limbi (Clasa_Resurse.ro.resx, Clasa_Resurse.fr.resx).

Local Resources se referă la pagini individuale. Orice sub-folder al aplicației poate conține un folder App_LocalResources. Aici, pentru orice pagină din sub_folder vom avea o clasă de resurse având același nume cu pagina. Pentru pagina Default.aspx, avem clasa locală asociată Default.aspx.resx. Pentru fiecare limbă, vom avea terminații la numele clasei (Default.aspx.ro.resx, Default.aspx.fr.resx).

Când localizăm o pagină, localizăm de fapt controalele din acea pagină. Butoane, etichete, poze etc. Mai exact, localizăm proprietățile acelor controale – de cele mai multe ori este Text-ul, dar poate fi sursa src a imaginii sau ToolTip-ul.

În ce limbă va vorbi site-ul meu?

În limba pe care o setezi tu sau în limba preferată a utilizatorului. Oricum, setările de limbă se stabilesc în Web.config, fișierul de configurare a aplicațiiei Web, aflat în directorul ei rădăcină. În exemplul de mai jos, sub nodul XML <system.web>, am plasat configurările de globalizare așa încât site-ul să vorbească pe limba preferată a vizitatorului, așa cum și-a setat-o în browser.

<globalization enableClientBasedCulture=’true’ requestEncoding=’utf-8′ responseEncoding=’utf-8′ fileEncoding=’utf-8′ responseHeaderEncoding=’utf-8′ culture=’ro-ro’ uiCulture=’auto’ />

Notă: uiCulture se referă la interfața aplicației web, adică la pagini; culture se referă la formatarea numerelor cu virgulă, separator de mii, formatarea datei și alte chestii interne aplicației etc.

Legătura între controale și resurse

Eu folosesc 3 tipuri de abordări atunci când asociez unui control o proprietate localizabilă:

1. Asociere programatică din cod. Ca atunci când, în codul executabil VB sau C# al unei pagini Default.aspx, schimbi o proprietate a unui control. Resursele locale vor fi în fișierele Default.aspx.resx, aflate în App_LocalResources.

txt_CampText.Text = GetLocalResourceObject("str_Default_Field_Text").ToString();
// alternativ se poate folosi GetGlobalResourceObject(), unde se specifică și numele clasei globale din App_GlobalResources

2. Legătură automată la resursele globale. Este o legătură declarativă, iar ASP.NET va ști singur să preia "traducerea" pentru un element din pagină:

<asp:Button ID="btn_Update" runat="server" Text="<%$ Resources:Butoane_Uzuale, btnUpdate_Text %>" />

4. Legătură automată la resursele locale ale paginii. Adică preluarea proprietății din fișierul de resurse asociat paginii. Cheia este să folosești atributul meta:ResourceKey în elementele ASP.NET.

<asp:Label runat="server" meta:resourcekey="lbl_Eticheta">Text implicit</asp:Label>
 

 

Cred că pot eu să scriu și o lună aici… Până la urmă tot "prinsul urechilor" este cea mai bună cale de a învăța. Luați codul și aruncați o privire, că vă prindeți repede.

Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s