Localeconv: примеры (PHP)
localeconv: arrayФункция localeconv возвращает ассоциативный массив с данными о числовых и денежных форматированиях для текущей или указанной локали. Она используется при разработке интернационализированных приложений для корректного отображения чисел, валют и других локале-зависимых форматов.
Функция находит применение при форматировании цен, отображении десятичных разделителей, группировке разрядов чисел в финансовых системах, электронной коммерции и мультиязычных проектах.
Функция не принимает параметров. Она работает с текущей локалью, установленной с помощью setlocale().
<?php
setlocale(LC_ALL, 'ru_RU.UTF-8');
$locale_info = localeconv();
print_r($locale_info);
?>Array
(
[decimal_point] => .
[thousands_sep] =>
[int_curr_symbol] => RUB
[currency_symbol] => ₽
[mon_decimal_point] => ,
[mon_thousands_sep] =>
[positive_sign] =>
[negative_sign] => -
[int_frac_digits] => 2
[frac_digits] => 2
[p_cs_precedes] => 0
[p_sep_by_space] => 1
[n_cs_precedes] => 0
[n_sep_by_space] => 1
[p_sign_posn] => 3
[n_sign_posn] => 3
[grouping] => Array
(
[0] => 3
)
[mon_grouping] => Array
(
[0] => 3
)
)<?php
setlocale(LC_ALL, 'en_US.UTF-8');
$info = localeconv();
echo $info['decimal_point']; // Точка как разделитель дробной части
echo $info['currency_symbol']; // Символ доллара
?>. $
NumberFormatter (класс из расширения intl) - предоставляет более мощные возможности форматирования чисел, валют и процентов с поддержкой ICU. Рекомендуется для сложных сценариев.
money_format - функция для форматирования денежных значений (устарела в PHP 7.4, удалена в PHP 8.0).
number_format - форматирует число с группировкой разрядов и заданными разделителями. Проще для базовых задач.
import locale
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
print(locale.localeconv()['decimal_point']).
const formatter = new Intl.NumberFormat('ru-RU');
console.log(formatter.format(1234.5)); // "1 234,5"1 234,5
SELECT FORMAT(1234.567, 2, 'ru_RU');1 234,57
<?php
// setlocale не вызыван, используется локаль по умолчанию C
$data = localeconv();
echo $data['decimal_point']; // Точка
?>.
<?php
if (setlocale(LC_ALL, 'invalid_locale') === false) {
echo 'Локаль не установлена';
}
?>Локаль не установлена
В PHP 8.0 функция localeconv была перенесена в стандартное расширение intl, но осталась доступной без необходимости явной загрузки расширения. Поведение функции не изменялось с PHP 5.3.
<?php
setlocale(LC_ALL, 'de_DE.UTF-8');
$lc = localeconv();
$number = 1234567.89;
$formatted = number_format(
$number,
2,
$lc['decimal_point'],
$lc['thousands_sep']
);
echo $formatted; // Немецкий формат
?>1.234.567,89
<?php
setlocale(LC_ALL, 'fr_FR.UTF-8');
$lc = localeconv();
$amount = -1234.56;
$format = "%s%s%s";
if ($amount >= 0) {
$result = sprintf($format,
$lc['p_cs_precedes'] ? $lc['currency_symbol'] : '',
abs($amount),
!$lc['p_cs_precedes'] ? $lc['currency_symbol'] : ''
);
} else {
$result = sprintf($format,
$lc['n_cs_precedes'] ? $lc['currency_symbol'] : '',
abs($amount),
!$lc['n_cs_precedes'] ? $lc['currency_symbol'] : ''
);
}
echo $result;
?>1234,56€
<?php
setlocale(LC_MONETARY, 'en_GB.UTF-8');
$info = localeconv();
// Проверка группировки разрядов для денежных значений
print_r($info['mon_grouping']);
?>Array
(
[0] => 3
)