IntlListFormatter în PHP

Setări regionale (locale) PHP 8.5+ (extensia intl)

Unește o listă de cuvinte după regulile limbii: „Ana, Mihai și Ioana” în română, „Ana, Mihai, and Ioana” în engleză.

Sintaxă
new IntlListFormatter(string $locale, int $type = IntlListFormatter::TYPE_AND, int $width = IntlListFormatter::WIDTH_WIDE)
IntlListFormatter::format(array $strings): string|false

Ce face IntlListFormatter

Fiecare limbă leagă altfel elementele unei liste: româna pune „și” înaintea ultimului element, engleza americană pune și virgulă înainte de „and”. IntlListFormatter folosește datele CLDR din biblioteca ICU, așa că nu mai scrii manual logica cu implode și ultimul element.

Tipul listei poate fi TYPE_AND („și”), TYPE_OR („sau”) sau TYPE_UNITS (unități de măsură). Lățimea WIDTH_WIDE, WIDTH_SHORT sau WIDTH_NARROW alege forma lungă sau prescurtată.

Parametri

Parametru Descriere
$locale Limba și regiunea, de exemplu "ro_RO" sau "en_US".
$type IntlListFormatter::TYPE_AND, TYPE_OR sau TYPE_UNITS.
$width IntlListFormatter::WIDTH_WIDE, WIDTH_SHORT sau WIDTH_NARROW.

Ce returnează

Metoda format() returnează textul format, sau false la eroare.

Exemple

Exemplul 1: Listă în română și în engleză

<?php
$nume = ["Ana", "Mihai", "Ioana"];

echo (new IntlListFormatter("ro_RO"))->format($nume) . "\n";
echo (new IntlListFormatter("en_US"))->format($nume) . "\n";
echo (new IntlListFormatter("ro_RO", IntlListFormatter::TYPE_OR))->format(["card", "numerar", "transfer"]);

Rezultat

Ana, Mihai și Ioana
Ana, Mihai, and Ioana
card, numerar sau transfer

Exemplul 2: Liste scurte

<?php
$f = new IntlListFormatter("ro_RO");

echo $f->format(["Iași"]) . "\n";
echo $f->format(["Iași", "Cluj"]) . "\n";
echo "Livrăm în: " . $f->format(["Iași", "Cluj", "Brașov", "Sibiu"]);

Rezultat

Iași
Iași și Cluj
Livrăm în: Iași, Cluj, Brașov și Sibiu

Greșeli frecvente

  • Construiești lista cu implode(", ", ...) și adaugi manual „și”: merge în română, dar greșește în alte limbi. Cu IntlListFormatter schimbi doar codul limbii.
  • Clasa lipsește: ai PHP sub 8.5 sau extensia intl nu este instalată.

Comenzi înrudite

  • implode: Unește elementele unui tablou într-un singur text, cu un separator între ele.
  • setlocale: Setează limba și regiunea (locale) folosite de funcțiile care depind de țară: sortare, clasificarea literelor, formate.
  • locale_is_right_to_left: Spune dacă o limbă se scrie de la dreapta la stânga (araba, ebraica), ca să setezi dir=”rtl” în pagină.
  • number_format: Formatează un număr cu zecimale și separator de mii, de exemplu 1.299,50.