MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Localizarea

Introducere în Internationalization API

Implementarea ultimelor standarde a adăugat în limbajul JavaScript capacități încorporate de localizare sau ceea ce reprezintă Internationalization API. Deși browserele populare au implementat deja acest API, dacă lucrăm cu versiuni vechi ale browserelor, ne putem confrunta cu situația în care acest API nu este suportat. În acest caz, putem verifica disponibilitatea obiectului window.Intl:

if (window.Intl && typeof window.Intl === "object"){  
   console.log("Internationalization API este suportat");
}
else {  
   console.log("Internationalization API nu este suportat");
}

Capacitățile Internationalization API sunt reprezentate în principal de următoarele obiecte:

  • Intl.ListFormat: aplicat pentru formatarea listelor
  • Intl.DisplayNames: aplicat pentru formatarea anumitor denumiri
  • Intl.DateTimeFormat: aplicat pentru formatarea datei și timpului
  • Intl.NumberFormat: aplicat pentru formatarea numerelor
  • Intl.Collator: aplicat pentru compararea șirurilor de caractere

Pentru crearea obiectelor acestor tipuri se folosesc funcții-constructor corespunzătoare, care acceptă până la 3 parametri (exemplu pentru constructorul Intl.Collator()):

new Intl.Collator()
new Intl.Collator(locales)
new Intl.Collator(locales, options)

Ca prim parametru se transmit localele utilizate. Dacă acest parametru nu este specificat, se utilizează locala implicită. În plus, în toate funcțiile-constructor se poate transmite un obiect de configurare opțional, care depinde de tipul specific al constructorului.

Locala reprezintă codul limbii în formatul BCP 47 sau un set de coduri lingvistice. Se poate folosi codul principal al localei. De exemplu, limba engleză este reprezentată de codul "en". Totuși, pot exista diferite variații ale limbii, și pentru a le reflecta, la codul principal se poate adăuga codul regiunii, de exemplu, "en-GB" (engleză britanică) sau "en-US" (engleză americană). Similar, limba română este definită de codul "ro" (sau variațiile regionale de tip "ro-RO"), germana - de codul "de", etc.

Exemplu de creare a obiectelor pentru locala română:

const locale = "ro";
const roDateTimeFormat = new Intl.DateTimeFormat(locale);
const roNumberFormat = new Intl.NumberFormat(locale);
const roCollator = new Intl.Collator(locale);

De asemenea, se poate transmite un set de locale:

const locales = [ "ro-RO", "en-US", "de-DE"];
const dateTimeFormat = new Intl.DateTimeFormat(locales);
const numberFormat = new Intl.NumberFormat(locales);
const collator = new Intl.Collator(locales);

În acest caz, localizarea va folosi prima locală suportată. Astfel, în lista [ "ro-RO", "en-US", "de-DE"] prima este locala "ro-RO", care reprezintă varianta română din România. Dacă această locală nu este suportată, atunci browserul verifică suportul pentru limba din codul principal al localei, adică în acest caz "ro" (limba română fără legătură cu regiunea).

Dacă nici aceasta nu este suportată, atunci browserul verifică suportul pentru a doua locală din listă - în acest caz "en-US". Dacă nici această locală nu este suportată, atunci se verifică locala codului principal - "en", și așa mai departe. În final, browserul va aplica prima locală suportată.

Dacă niciuna din localele din listă nu este suportată de browser, atunci se aplică locala implicită.

Pentru a verifica dacă o anumită locală este suportată de browserul curent se poate folosi metoda statică supportedLocalesOf()

Intl.Collator.supportedLocalesOf()
Intl.DateTimeFormat.supportedLocalesOf()
Intl.NumberFormat.supportedLocalesOf()

În această metodă se transmite locala sau un array de locale ale căror suport trebuie verificat. De exemplu:

console.log(Intl.NumberFormat.supportedLocalesOf("ro"));    // română
console.log(Intl.NumberFormat.supportedLocalesOf("ar"));    // arabă
console.log(Intl.NumberFormat.supportedLocalesOf(["de", "bo"])); // germană și tibetană

Această metodă returnează un array de locale suportate, care corespund localelor verificate. De exemplu, în cazul meu, outputul va fi următorul:

["ro"]
["ar"]
["de"]

Cum se observă din output, tibetana nu se suportă.

← Lecția anterioară Lecția următoare →