Localizarea listelor și Intl.ListFormat
Obiectul Intl.ListFormat permite formatarea listelor în conformitate cu anumite setări de localizare. Constructorul său poate accepta doi parametri:
Intl.ListFormat([locales[, options]])
Parametrul locales reprezintă codul limbii în format BCP 47 sau un set de coduri lingvistice.
Parametrul options reprezintă un set suplimentar de opțiuni:
- localeMatcher: algoritmul de potrivire. Poate fi "lookup" sau "best fit". Implicit este "best fit"
- style: lungimea șirului formatat. Poate fi "long" (de exemplu, A, B și C), "short" sau "narrow" (de exemplu, A, B, C). Implicit este "long"
- type: tipul șirului de ieșire. Poate fi "conjunction" (penultimul și ultimul element din listă sunt unite cu conjuncția "și" - A, B și C), "disjunction" (penultimul și ultimul element din listă sunt unite cu conjuncția "sau" - A, B sau C), "unit" (utilizat pentru liste cu valori numerice la care se adaugă unități de măsură). Implicit este "conjunction"
Pentru formatarea listei, acest obiect oferă metoda format(), în care se transmite lista de formatat. Metoda returnează lista formatată și localizată sub formă de șir.
Să examinăm câteva exemple. Adăugăm conjuncția "și":
const people = ["Tom", "Bob", "Sam"];
const andList = new Intl.ListFormat("ro").format(people);
console.log(andList); // Tom, Bob și Sam
În acest caz, se utilizează localizarea pentru cultura română și pentru aceasta ca parametru locales în constructorul Intl.ListFormat se transmite codul limbii ru. Rezultatul este șirul Tom, Bob și Sam. În acest caz, pentru al doilea parametru - options s-au folosit setările implicite. Cu toate acestea, le putem specifica în mod explicit:
const people = ["Tom", "Bob", "Sam"];
const andList = new Intl.ListFormat("ru" , { style:"long", type: "conjunction" }).format(people);
console.log(andList); // Tom, Bob și Sam
În acest caz, vom obține același rezultat, deoarece opțiunea type: "conjunction" presupune utilizarea conjuncției "și".
Acum folosim conjuncția "sau":
const people = ["Tom", "Bob", "Sam"];
const orList = new Intl.ListFormat("ru", { style:"short", type: "disjunction" }).format(people);
console.log(orList); // Tom, Bob sau Sam
Nu suntem limitați la o singură cultură lingvistică. Astfel, localizăm lista în mai multe limbi:
const people = ["Tom", "Bob", "Sam"];
// limba engleză
const enList = new Intl.ListFormat("en" , { style:"long", type: "conjunction" }).format(people);
console.log(enList); // Tom, Bob, and Sam
// limba germană
const deList = new Intl.ListFormat("de" , { style:"long", type: "conjunction" }).format(people);
console.log(deList); // Tom, Bob und Sam
// limba franceză
const frList = new Intl.ListFormat("fr" , { style:"long", type: "conjunction" }).format(people);
console.log(frList); // Tom, Bob et Sam
// limba chineză
const zhList = new Intl.ListFormat("zh" , { style:"long", type: "conjunction" }).format(people);
console.log(zhList); // Tom、Bob和Sam