Ce face setlocale
O setare regională (locale), de exemplu ro_RO.UTF-8, spune programelor cum se scriu numerele, cum se sortează textele și cum se numesc lunile într-o anumită limbă. setlocale o schimbă pentru o categorie: LC_COLLATE (sortare), LC_CTYPE (litere), LC_MONETARY, LC_NUMERIC, LC_TIME sau LC_ALL (toate).
Poți da mai multe nume, iar PHP îl folosește pe primul care există pe server. Funcția returnează numele setat sau false dacă niciunul nu există. "0" ca nume doar citește setarea curentă.
Din PHP 8, transformarea numerelor zecimale în text nu mai depinde de locale (punctul rămâne punct). Setarea este pentru tot procesul, deci poate afecta și alte cereri pe serverele cu mai multe fire de execuție.
Parametri
| Parametru | Descriere |
|---|---|
$category |
Categoria: LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME, LC_MESSAGES. |
$locales |
Numele setării sau un tablou de nume încercate în ordine. "0" citește setarea curentă, "" o ia din mediul sistemului. |
$rest |
Opțional. Alte nume încercate, dacă primul nu există. |
Ce returnează
Numele setării aplicate sau false.
Exemple
Exemplul 1: Setarea limbii române, cu variante de rezervă
Numele disponibile diferă de la un sistem la altul. Pe serverele Linux trebuie să fie generată setarea românească (de exemplu cu locale-gen ro_RO.UTF-8).
<?php
$rezultat = setlocale(LC_ALL, "ro_RO.UTF-8", "ro_RO.utf8", "ro_RO", "Romanian");
var_dump($rezultat);
var_dump(setlocale(LC_ALL, "0"));
var_dump(setlocale(LC_ALL, "xx_YY"));
Rezultat
string(11) "ro_RO.UTF-8"
string(11) "ro_RO.UTF-8"
bool(false)
Exemplul 2: Numerele zecimale nu sunt afectate în PHP 8
<?php
setlocale(LC_ALL, "ro_RO.UTF-8");
echo 3.5 . "\n";
echo number_format(1234.5, 2, ",", ".");
Rezultat
3.5
1.234,50
Greșeli frecvente
- Nu verifici rezultatul și presupui că setarea a fost aplicată. Dacă locale-ul nu este instalat pe server,
setlocalereturneazăfalseși totul rămâne pe setarea „C”. - Folosești
setlocalepentru a afișa numele lunilor în română cudate.dateafișează mereu în engleză; foloseșteIntlDateFormatterdin extensia intl.
Comenzi înrudite
localeconv: Returnează formatele numerice ale setării regionale curente: separator zecimal, separator de mii, simbol monetar.strcoll: Compară două texte după regulile de sortare ale limbii setate cu setlocale.nl_langinfo: Returnează o informație din setarea regională curentă: numele lunilor și zilelor, formatul datei, codarea.